【DINO爱编程】几何_图形的反演/映射算法
这期又分享一下几何图形的一起有趣而且很美的算法,图形的反演算法,这个算法我是偶然在书上找到了。最近在研究三维的编程理论(用于编出更好的结构分析程序的界面),所以我去图书馆借点数学书来补一下课,香港的中央图书馆有很多很好的数学教科书,于是我去图书馆看了一天的书,最终给我找到一本很不错的书《Math and Art, an intro to visual math》.
这本书列举了很多美丽的数学几何图形的算法,书上有一个基于初中数学就能完成的数学算法叫做(inversion),我翻译成反演/映射算法,它是映射算法中的一种。Wolfram MathWorld百科有详细的介绍,网址如下所示。https://mathworld.wolfram.com/Inversion.html
【数学原理】inversion
通过上述的图例,通过作图法就可以找出映射点P与原始点P’之间的关系,作一个圆作为映射参考,半径为k,圆内的原始点P’,连接O点,经P’点作OP的垂直线QP’,与圆相交于Q点,过Q点作圆的切线QP,QP与直线OP相交于P点,那么映射点P点就这样求出来了。经过公式推算,点P’(X’,Y’)与点P(X,Y)的关系如下式所示,那么编程的话就用这个公式就可以了。
采用上述公式即可以编程了。
我通过Pascal语言编了程序重现了书上的两个例子,棋盘与Sierpinski三角形的反演/映射图。
这个是原书的两个例子。
通过PASCAL语言编程实现了书上的例子,体现数学之美。
Sierpinski是采用分形算法画出来的三角形,右边是映射图,原来三角尖是向外的变成向内的。
这个算法的特点,把正交的图形变成中心对称的图形,映射算法还有很多,如柱面或球面的映射可对应实际的物理现象。程序可以导入图形,对任意图片进行映射,如阿拉伯风格的磁砖(左边是原因,右边是映射图),如下图所示。通过这个算法,你设计了一个中心对称的图案,相当于设计了两个。
正交形对称图案可以马上变成中心对称图案
对于非对称的图案,效果就差点意思,只能把蒙罗丽莎变成碗豆人了。
映射的中心点(圆心点O)可以修改,那么我制作了一个很晕的动图,如下所示。
点击下面的【阅读原文】可以得到下载方法
【程序下载】点击下载:图形程序的下载地址:math_art_inversion.rar