制作图像的双曲线平铺

马林·克里斯特森◊◊◊

  • 从计算机中选择图像文件。
  • 选择具有p个顶点的双曲多边形,单击p。
  • 选择每个顶点相邻的双曲多边形数,单击q。
  • 如果愿意,可以通过拖动来移动图像。
  • 单击“生成平铺”。
  • 如果你想下载比屏幕上显示的更大的图像,请单击“生成大图像”(使用Firefox避免下载时崩溃)。
  • 如果您希望第一个多边形是“非欧几里德”的,请通过单击“更改第一个平铺”在三个不同选项之间切换。

背景颜色:
如果使用移动设备,请选择图像或拍照。
如果需要,请移动图像。选择p和q。生成平铺。

给我买杯卡布奇诺!

加载的图像将被裁剪为居中的双曲多边形。中心多边形的重复双曲线反射瓷砖。

选项产生大量生成比屏幕上显示的图像更大的平铺。放大平铺的默认比例因子是四,这是一个长度因子。可以在下面选择另一个比例因子。Chrome可能尝试下载大图像时崩溃-“噢,Snap!”Firefox不会崩溃。

比例因子:4

生成较大的平铺需要较长的时间,主要是因为平铺的边缘变得更精细。您可以通过单击停止生成停止.只有在浏览器中看到此选项卡时,才会生成平铺。放大的平铺具有透明背景。

如果更改第一个互动程序单击时,第一个平铺的渲染将在“无失真”、“克莱因失真”和“多项式失真”之间循环。下面从左到右显示了三个不同选项的效果。失真的图像需要更长的时间来计算,因此,移动扭曲的图像可能看起来很落后。

扭曲

双曲线平铺

平铺由带(p\)边的规则双曲多边形组成\(q)是在每个角处汇聚的多边形数。在欧几里得中只有当\((p-2)\cdot(q-2)=4\)时,才能平铺规则多边形。换句话说,您只能为三个(p,q\}):(3,6\},4,4\}和6,3\}对,请参见几何体-细分和对称用于交互式欧几里得平铺。在双曲线几何中,三角形的角和小于180°每当\((p-2)\cdot(q-2)>4\)时,可以对规则双曲多边形进行平铺。

当使用所谓的庞加莱圆盘来模拟双曲线几何时,整个宇宙都在一个圆内。在上面的平铺中,\(C_\infty\)的内部是灰色的。圆圈本身不属于宇宙,但可以被视为无穷远处的圆。当\(q \)趋于无穷大时,多边形的顶点接近\(C_ \ infty \)。顶点形成的形状\(C_\infty)是所谓的理想的多边形。如果在上面的平铺中选择\(q \)-value\(infty \)。

有关平铺的数学和构造信息,以及带有可拖动点(但没有图像)的交互式示例,看见非核素几何-Poincarédisc中的交互式双曲平铺.

至于扭曲第一个多边形,选项“克莱因扭曲”从假定的Beltrami-Klein模型然后缩放双曲Poincaré多边形。选项“多边形失真”如下所述。

多项式畸变

欧氏多边形内的每个点都位于与多边形的一个边界段平行的段上。

算法4
图1:线段上的点

对于每一个这样的线段,都有可能找到相应的双曲测地线。通过将线段上的所有点映射到相应的测地线,我们得到了从欧几里得到双曲多边形的合理映射。

算法5
图2:测地线上的点

在欧氏多边形内拾取一个点。识别三角形(大三角O、V_1、V_2)包含\(A\),如图3所示。

算法1
图3:识别三角形

有一条直线\(l\)到\(a\)平行于直线\(V_1,V_2\)。\(N_1,N_2)是(l)和(bigtrianglup O,V_1,V_2)的交点。让\(N\)成为通过(N_1,N_2)的测地线中点,设(B)为线(AN)和测地线,如图4所示。选择\(B\)作为双曲多边形中的点是合理的对应于欧氏多边形中的\(A\)。

算法2
图4:选择B作为双曲线点

为了在将点舍入为与像素网格对应的整数值时获得平滑的图像必须按相反的顺序进行。给定一个点(B),找到该点(a)。让包含\(B\)的像素像素的颜色包含\(A\)。

让(B)在(C_\infty)中被反射到一点(B'\)。任何测地线穿过(B\)也必须穿过(B'\)。未知的中点\(N\)通过未知点(N_1)和(N_2)的测地线到(B)的距离必须与到(B’)的距离相同。此外,它必须位于直线\(OV\)上,其中\(V\)是通过(V_1V_2)的测地线的中点。

算法3
图5:求N的两个条件

为简单起见,假设\(O=(0,0)\)。使用点表示法表示点的坐标。然后:\[(N.x-B.x)^2+(N.y-B.y)^2=(N.x-B'.x)^2+(N.y-B'.y)^2\]

当\(V.y=0\)时,则

\[\开始{align*}N.x&=\压裂{B'.x^2+B'.y^2-B.x^2-B.y^2}{2(B'.x-B.x)}\\N.y&=0\结束{align*}\]

否则

\[\压裂{N.x}{N.y}=\压裂{V.x}{V.y}\]

和\(N.y\)可以从中找到\[N.y=\frac{V.y(B'.x^2+B'.y^2-B.x^2-B.y^2)}{2\左(V.x(B'..x-B.x)+V.y(B'.y-B.y)\右)}\]

设(g)是以(N)为中点通过(B)的测地线。现在,可以将(N_1)和(N_2)作为交点在\(g)和\(bigtriangleup O,V_1,V_2)之间,和\(A)可以作为线\(BN\)和行\(N_1N_2\),如图4所示。

根据Attribution-NonCommercial-ShareAlike CC许可
Creative Commons许可证