【发布时间】:2017-05-26 10:28:21
【问题描述】:
我正在尝试编写一个执行以下计算的 python 脚本:
输入: (1) List L:一些二维点的列表 (2) List V:三角形的顶点 (3) 正整数n:从那个三角形创建的科赫雪花的顺序
输出: 列表 O,L 的子集,包含 L 中位于区域 Kn 上或内部的点,该区域由 n 阶雪花定义。
我的尝试: 首先,我想我会先实现一个标准算法来绘制给定顺序(和边长)的雪花。这是我写的代码:
import turtle
from test import test
world= turtle.Screen()
t= turtle.Turtle()
def koch(t, order, size):
if order == 0:
t.forward(size)
else:
for angle in [60, -120, 60, 0]:
koch(t, order-1, size/3)
t.left(angle)
def koch_fractal(t, order, size, main_polygon_sides= 3):
for i in range(main_polygon_sides):
koch(t, order, size)
t.right(360/main_polygon_sides)
koch_fractal(t, 2, 100)
world.mainloop()
但由于它没有说明雪花区域,我无法继续前进。接下来,我认为雪花的区域可能会有一些见解,所以我写了这个函数:
from math import sqrt
koch_cache={}
def koch_fractal_area(n, side):
original_area = (sqrt(3)/4) * side**2 #Area of the original triangle
koch_cache[0] = original_area
for i in range(n+1):
if i not in koch_cache:
koch_cache[i] = koch_cache[i-1] + (3*4**(i-1))*(sqrt(3)/4) * (side/(3**i))**2
return koch_cache[n]
它实现了一个明确的公式来计算面积。同样,这似乎与我想要做的事情无关。
我该如何解决这个问题? 提前致谢!
【问题讨论】:
-
嗨!欢迎来到Stack Overflow。请提供minimal reproducible example!谢谢!另见How to Ask
-
提示:请注意,科赫雪花的每个连续顺序都是前一个的超集。因此,如果一个点在某个阶 i 的雪花中,那么它也在所有更高阶的雪花中。
-
@j_random_hacker 有没有办法明确指定属于特定迭代的点集?
-
我不知道比检查本次迭代中添加到雪花中的所有新三角形更好的方法。
-
既然你已经得到了多边形,那么只需执行hit test 来确定是否有任何点......
标签: python algorithm recursion computational-geometry turtle-graphics