我想使用Python创建以下图像模式。 为了清晰起见:这是两个独立的图像序列(一个在上排,一个在下排)。 它们相互关联,因为它们是堆积四面体的投影区域。 在三维环境中,它看起来如下:
请注意,这些三维对象没有缩放,因此对象的总尺寸保持不变。上面显示的投影面积就是这种情况。
四层结构(未显示)顶部将有另外10个单元格。
第n
级的细胞总数为:
C = (n^3 + 3*n^2 + 2*n)/6
现在我正在手工创建图案(制作3D对象,渲染出投影区域,重复),但这是非常乏味的,不可行的更多的细分。在
我设法用下面的代码创建了一个多边形,但我不知道如何循环,使总边长度保持不变,但多边形以上面所示的方式细分。在
^{pr2}$
我使用了matplotlib和包含的多边形补丁,但我不确定这是否是最理想的方法。
另外,多边形的方向或颜色也不重要。在
我没有使用matplotlib,而是提供了一个使用SVG的解决方案,其中脚本只打印出相应的SVG命令。在
注意:创建的SVG标头缺少相同的定义,这就是为什么某些程序无法处理生成的图像。虽然Inkscape可以毫无问题地打开它并再次保存它。
在SVG
中定义多边形所描述的解决方案基于您展示的“箭头”示例,即下面的示例。
我将箭头编码为SVG路径,有四个点p0、p1、p2和p3,其中p0是顶部尖端,p1是右下边缘,p3是左下角,p2是尖端下面的点。每个点都有一个x和y坐标(p0x,p0y…)。在
注意:与数学坐标不同,SVG坐标从左到右(x)和自上而下(y)增加,因此原点是左上角。
路径以字符串形式存储,点是可变的。最后一个字符串是使用python的
str.format()
方法创建的。在代码
说明
箭头是以递归方式创建的,即从顶部箭头开始。箭头的维数是}。下面解释的递归模式是根据经验推导出来的,并不是直接基于您的3D示例。在
width/n
和height/n
,其中n
是所需的递归级别(n>;=1)。您展示的示例是n=1
、n=2
、和{n=1:在级别
n=1
中,创建了顶部箭头之后就完成了。在n=2:在级别
n=2
中,这个上箭头将创建另外三个,分别位于右下方和左下方和右下方。这三个箭头的尖端(p0)分别位于原始箭头的p2、p3和p1处。你完了。在n=3:对在级别
n=2
中创建的每个箭头重复上述过程。在下面请找到
n=6
级别的示例。 对于三角形,你的上例,这个想法很容易适应。你只需要改变多边形路径和递归模式。 顺便说一句,使用给定的脚本和a=0
创建一个循环版本的trianlges。所以,如果你懒的话,只需使用它并在inkscape中转换生成的SVG。在帮助程序类:
创建了一个辅助类,用于缩放和平移多边形以生成图案。并编写了绘制第一个图案的算法。应该不难做出一个类似的算法来绘制第二个图案。在
^{pr2}$对于第一种模式,您可以使用以下代码:
相关问题 更多 >
编程相关推荐