You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

庞加莱圆盘中双曲镶嵌顶点相关问题咨询

庞加莱圆盘中双曲镶嵌顶点相关问题咨询

嘿,这个问题问到点子上了,我来给你仔细捋一捋~

首先得明确前提:双曲平面里能实现正$p$-边形、每个顶点周围围$q$个的镶嵌,必须满足**$1/p + 1/q < 1/2$**,这是双曲几何和欧氏几何的核心区别之一,先把这个条件记下来。

一、原点到相邻顶点的欧氏距离计算

我们分两步来推导:

1. 先求双曲边长

双曲正$p$-边形的内角是$2π/q$(因为$q$个多边形在顶点处拼合,内角和刚好是$2π$)。根据双曲几何中多边形的内角与边长关系,有公式:
$$\cos\left(\frac{π}{p}\right) = \sin\left(\frac{π}{q}\right) \cosh(a)$$
其中$a$是正$p$-边形的双曲边长。我们可以解出$\cosh(a)$:
$$\cosh(a) = \frac{\cos\left(\frac{π}{p}\right)}{\sin\left(\frac{π}{q}\right)}$$
进而得到双曲边长$a = \text{arccosh}\left( \frac{\cos\left(\frac{π}{p}\right)}{\sin\left(\frac{π}{q}\right)} \right)$。

2. 转换为欧氏距离

庞加莱圆盘模型中,原点(记为$O$)到任意点$z$的双曲距离$d$和欧氏距离$r=|z|$满足关系:
$$\tanh\left(\frac{d}{2}\right) = r$$
这里$d$就是刚才求的双曲边长$a$,代入后结合双曲函数恒等式$\tanh\left(\frac{1}{2}\text{arccosh}(x)\right) = \sqrt{\frac{x-1}{x+1}}$,可以化简得到欧氏距离$r$:
$$r = \sqrt{ \frac{ \cos\left(\frac{π}{p}\right) - \sin\left(\frac{π}{q}\right) }{ \cos\left(\frac{π}{p}\right) + \sin\left(\frac{π}{q}\right) } }$$
这个式子就是原点到相邻顶点的欧氏距离的最终表达式。

二、高效生成镶嵌所有顶点的算法

要生成所有顶点,核心是利用双曲平面的等距变换(旋转、分式线性变换),用**广度优先搜索(BFS)**的方式迭代生成,避免重复和冗余,步骤如下:

  • 初始化参数:先计算出上述的欧氏距离$r$,生成原点周围的$q$个相邻顶点——它们分布在以原点为中心、半径$r$的圆上,相邻顶点的角度间隔是$2π/q$(比如第$k$个顶点的角度是$\frac{2πk}{q}$,$k=0,1,...,q-1$)。
  • 初始化数据结构:用一个集合存储已生成的顶点(用复数或高精度坐标表示,避免重复),把原点和这$q$个初始顶点加入集合;再用一个队列来管理待处理的顶点,把这$q$个初始顶点加入队列。
  • 迭代生成顶点
    1. 从队列中取出一个顶点$v$。
    2. 找到$v$的一个已知相邻顶点$u$(比如生成$v$的父顶点,比如原点或者之前生成的某个顶点)。
    3. 计算**绕$v$旋转$2π/q$**的双曲等距变换:在庞加莱圆盘中,绕点$c$旋转$\theta$的分式线性变换公式是:
      $$z' = \frac{ e^{iθ}(z - c) + c(1 - e^{iθ}) }{ \overline{c}(1 - e^{iθ})z + 1 - |c|^2 e^{iθ} }$$
      这里$\theta=2π/q$,把$u$代入这个变换,重复$q-1$次,得到$v$的其他$q-1$个相邻顶点。
    4. 对每个生成的新顶点$w$,如果它不在已生成的集合中,就加入集合和队列,继续迭代。

这种BFS的方式能按层级生成所有顶点,不会遗漏也不会重复,对于大多数$p$、$q$组合都很高效。

备注:内容来源于stack exchange,提问作者nonhuman

火山引擎 最新活动