迭代定义深度的递归拆分
Iterating a recursive split of defined depth
我有两个顶点 (a) 和 (b),我想在它们的中点递归地分割它们。
模式看起来像这样:
对于这个特定的深度,我可以这样写:
a_b = self.abfn( a, b)
ab_b = self.abfn( a_b, b)
a_ab = self.abfn( a, a_b)
abb_b = self.abfn(ab_b, b)
ab_abb = self.abfn( a_b, ab_b)
a_aab = self.abfn( a, a_ab)
aab_ab = self.abfn(a_ab, a_b)
但是我想这样写,我可以定义一个深度并重复分割到那个深度。
一个警告是我不想使用递归函数
如何以这种方式迭代?
我正在使用 python,但语言并不重要。
您可以使用此代码:
def midpoint(a, b):
return ((a[0] + b[0]) / 2, (a[1] + b[1]) / 2)
def abfn(a, b, depth):
vertices = [a, b]
for _ in range(depth):
nextlevel = vertices[:1]
for a, b in zip(vertices, vertices[1:]): # all consecutive pairs
mid = midpoint(a, b)
nextlevel.extend((mid, b))
vertices = nextlevel
return vertices
调用示例:
a = (0, 100)
b = (0, 200)
vertices = abfn(a, b, 2)
print(vertices)
输出:
[(0, 100), (0.0, 125.0), (0.0, 150.0), (0.0, 175.0), (0, 200)]
我有两个顶点 (a) 和 (b),我想在它们的中点递归地分割它们。
模式看起来像这样:
对于这个特定的深度,我可以这样写:
a_b = self.abfn( a, b)
ab_b = self.abfn( a_b, b)
a_ab = self.abfn( a, a_b)
abb_b = self.abfn(ab_b, b)
ab_abb = self.abfn( a_b, ab_b)
a_aab = self.abfn( a, a_ab)
aab_ab = self.abfn(a_ab, a_b)
但是我想这样写,我可以定义一个深度并重复分割到那个深度。 一个警告是我不想使用递归函数
如何以这种方式迭代?
我正在使用 python,但语言并不重要。
您可以使用此代码:
def midpoint(a, b):
return ((a[0] + b[0]) / 2, (a[1] + b[1]) / 2)
def abfn(a, b, depth):
vertices = [a, b]
for _ in range(depth):
nextlevel = vertices[:1]
for a, b in zip(vertices, vertices[1:]): # all consecutive pairs
mid = midpoint(a, b)
nextlevel.extend((mid, b))
vertices = nextlevel
return vertices
调用示例:
a = (0, 100)
b = (0, 200)
vertices = abfn(a, b, 2)
print(vertices)
输出:
[(0, 100), (0.0, 125.0), (0.0, 150.0), (0.0, 175.0), (0, 200)]