庞加莱圆盘中双曲镶嵌顶点相关问题咨询
嘿,这个问题问到点子上了,我来给你仔细捋一捋~
首先得明确前提:双曲平面里能实现正$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$个初始顶点加入队列。
- 迭代生成顶点:
- 从队列中取出一个顶点$v$。
- 找到$v$的一个已知相邻顶点$u$(比如生成$v$的父顶点,比如原点或者之前生成的某个顶点)。
- 计算**绕$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$个相邻顶点。 - 对每个生成的新顶点$w$,如果它不在已生成的集合中,就加入集合和队列,继续迭代。
这种BFS的方式能按层级生成所有顶点,不会遗漏也不会重复,对于大多数$p$、$q$组合都很高效。
备注:内容来源于stack exchange,提问作者nonhuman




