我很高兴能够使用 WebGPU 发布一个交互式可视化效果,该效果体现了David Mumford、Caroline Series 和 David Wright 所著的《因陀罗的珍珠:菲利克斯·克莱因的愿景》一书中 的迷人数学。
本书探讨了通过迭代复平面保角映射创建的模式(称为莫比乌斯变换),以及它们与对称性和自相似性的联系。这些模式是由德国数学家Felix Klein发现的,现代计算机图形学使它们能够完全可视化并进行详细探索。
一些背景
我们从一组圆圈开始,它们将成为我们的种子元素。我们的目标是覆盖/镶嵌整个平面,但与更“常见”的镶嵌不同,我们不会直接使用回转、(滑动)反射或平移。
相反,我们将使用莫比乌斯变换。我们可以将其视为平移、膨胀、旋转和圆翻转的组合。
给定一组四个圆圈(外部的深红色和深蓝色大圆圈),莫比乌斯变换的动作将把一个圆圈外部的内容映射到它前面的圆圈内部。
上图显示了经过两次迭代后的效果。莫比乌斯变换已将外圆的外部映射到其各自的内部几次。结果有点像格鲁耶尔奶酪:我们覆盖了平面的“大部分”,除了黄色/白色内部圆圈。
如果我们再迭代几次,我们可以使这些“整体”变得更小,如果我们无限期地这样做,我们就会覆盖整个平面。
限制集
本书随后探讨了极限集:这是通过对群中的所有圆进行交集而获得的集合。对于上图,这是“尘埃”,但对于某些配置,我们获得了更有趣的形状,引入了富克斯群和准富克斯群。
阿波罗垫片作为极限集
圆和生成器(莫比乌斯变换)的特殊配置可以生成阿波罗垫片作为其极限集。
我们证明了阿波罗垫片的一些共轭可以揭示其他众所周知的数学结构,如福特圆。我们还证明了在这种情况下,共轭可以被认为是黎曼球面在平面上的旋转动作,具有保角映射。
泛化极限集:超越圆
我们无需仔细选择圆和莫比乌斯变换(将一个圆的外部映射到另一个圆的内部),而是可以通过直接从莫比乌斯生成器本身计算极限集来推广这项工作。这样可以得到不一定由圆构成的极限集。
可以给出这些“尖点”极限集的莫比乌斯变换的参数化被称为 Maskit 参数化。Maskit 切片是群变为非离散(我们渲染无意义)的区域。
如果我们停留在精确的边界上,我们就会得到处于非离散极限的群。可视化允许探索这些尖点群。这本书详细介绍了这些群的属性。
执行
我使用这个项目深入研究 WebGPU 和 WGSL 进行着色编程。
初始可视化是通过KleinGroup
类创建的。该类将每次迭代渲染成纹理,然后将其反馈到类中以供后续迭代。从编程上讲,这很好地模仿了莫比乌斯变换的动作。生成的纹理被输入到将Quad
四边形渲染到屏幕上的类中。
然后我们包括一个RSphere
将渲染黎曼球的类。KleinGroup
将纹理提供给Quad
和RSphere
。quad
然后将球体放在顶部,以描述共轭如何工作。
限制集
为了可视化极限集,我们实现了 Jos Ley 的:使用 Maskit 参数化的克莱因群极限集快速算法。该算法直接通过片段着色器渲染极限集。片段着色器的输入是莫比乌斯变换和一个纹理,该纹理很好地描述了集合每侧的划分。对于屏幕上的每个点,如果它落在曲线下方或上方的区域内,我们将应用莫比乌斯变换a
或其逆变换A
。
对于距离 Maskit 边界足够远的集合,该线可以实现为平滑曲线。
尖角
对于位于 Maskit 切片边界的极限集,情况更为复杂。我们需要找到群为抛物线的 Mobius 乘积组合(我们称之为抛物线“词”)。对于每两个 Mobius 变换及其逆变换,a
,A
,b
,B
,表示它是抛物线的词可能类似于:aaaaBaaaaB
。找到此矩阵乘积的固定点会为我们提供一个与集合中的两个圆相切的点。
然后,我们需要循环这些单词,以获得与集合中每个圆相切的所有其他固定点。我获取单词及其循环排列的实现可以在此笔记本中找到。
上面的纹理使用绿色和蓝色来指示在评估和应用莫比乌斯变换之前执行水平移动的算法(这让我很头疼)。
计算 Maskit 切片
最后,为了追踪 Maskit 边界,我们需要实现一个抛物线生成器的牛顿求解器(其中)。我们通过获取Farey 分数序列Trace=2
沿 x 轴移动,为每个分数生成一个跟踪多边形,然后使用牛顿法求解,这将找到我们需要的 µ 值。然后,将 Farey 序列的分子、其分母和复数值 µ 输入尖点极限集。p
q
!
RA/SD 衍生者AI训练营。发布者:chris,转载请注明出处:https://www.shxcj.com/archives/6166