欢迎光临散文网 会员登陆 & 注册

Houdini学习笔记036_Poincaré Disc(庞加莱圆盘)<下>

2022-09-27 16:08 作者:独孤嘌呤  | 我要投稿


不知道大家听过算法艺术(Algorithm Art,也叫Generative Art)没有,这是一种用计算机程序进行艺术创作的方式。由此可以得到很多神奇的图案。Hyperbolic Tiling应该算是其中的一种,接上一篇的基础图案创建出来后,我用foreach节点(For-Loop with Feedback)进行循环拷贝。每次循环都是将现有的图案进行莫比乌斯反转,如果和已有的重复则去掉。

经过一番令人头大的计算,总算是把全部VEX代码写完了,但还是有些bug和没注意到的小问题在里面。就不打算展开细讲了。foreach循环内也是只用了一个Attribute Wrangle节点,Run Over方式还是Detail (only once)。VEX代码如下:

这里的示例是p = 7, q = 3的情况,初始得到的图案是7条弧线。对于每条弧线由上面的三个点计算出其所在圆的圆心center和半径radius。然后用mobius变换得到中心点的反演变换点,作为新的七边形的中心。除了中心点之外的所有点也要进行莫比乌斯变换,得到对应的七边形。

因为变换后的位置可能已经有七边形存在了,所以要预判断一下。我是把已有的中心点放在一个stack[ ]数组中,每次莫比乌斯变换后,与数组中已有点的位置作比较,如有重合(距离<临界值,如0.01)说明这个位置已有图形了,则不再重复变换。如果没有,则生成新的中心点,并将其放到stack数组中。

对于foreach循环需要注意的是,Block BeginMethod用的是Fetch Feedback,即上一次的结果作为下一次循环的初始条件。Block EndGather Method用的是Feedback Each Iteration,只显示最终次循环的结果,而不要把之前循环的都merge到一起。

因为中心点都放在了stack组中,后面可以用delete节点选择组删除点,只保留图形的边。

这个代码块基本上凑合能用,毛病也不少,迭代次数多了之后计算会出问题。还有弧线过圆心时的情况没有考虑进去,只是这个月没有精力再深挖了,以后有时间再改进吧。

如果可能的话,我还是想把Dunham教授文献中的方法拿Houdini试一下。那样效率应该会高很多。说不定可以将图像的RGB值先映射到某个初始图案上,每次迭代变换后对应的点继承颜色属性,就可以得到一幅魔性十足的作品了。

但愿这个想法能早日实现,祝大家国庆快乐~

Houdini学习笔记036_Poincaré Disc(庞加莱圆盘)<下>的评论 (共 条)

分享到微博请遵守国家法律