python科赫雪花代码的意思_Python原野中的科赫雪花

我对这个Python程序有问题。它应该用n次迭代绘制一个科赫雪花。代码确实可以编译,但它不会画出雪花,我找不到我的错误。在

如果有人能帮我解决这个问题,我会非常感激的!在from math import sqrt

from matplotlib import pyplot as plt

class vector:

def __init__(self,one,two):

self.x = one

self.y = two

def printV(self):

s = "(" + str(self.x) + "," + str(self.y) + ")"

print s

def __len__(self):

l = sqrt(self.x**2 + self.y**2)

return l

def kochSnowflakeImpl(p1,p2):

u = vector(p1.x + p2.x - p1.x, p1.y + p2.y - p1.y)

array = []

#calculate n1

n1 = vector(p1.x + 1.0/3.0 * u.x, p1.y + (1.0/3.0) * u.y)

#calculate n2

n2 = vector(p1.x + 2.0/3.0 * u.x,p1.y + 2.0/3.0 * u.y)

v = vector(n1.y + n2.y - n1.y, -(n1.x + n2.x - n1.x)) #is an orthogonal vector to u

#calculate n3

n3 = vector(n1.x + 0.5*u.x + sqrt(3.0)/2.0 * v.x, p1.y + 0.5*u.y + sqrt(3.0)/2.0* v.y)

array.append([n1.x,n1.y])

array.append([n2.x,n2.y])

array.append([n3.x,n3.y])

return n1,n2,n3,array

def kochSnowflake(level):

p1 = vector(0,0) #format: p = (x,y)

p2 = vector(1,0)

p3 = vector(0.5,sqrt(3)/2)

array = [[p1.x,p1.y],[p2.x,p2.y],[p3.x,p3.y],[p1.x,p1.y]]

while level > 0:

if level == 1:

n1,n2,n3,array1 = kochSnowflakeImpl(p1,p2)

n4,n5,n6,array2 = kochSnowflakeImpl(p2,p3)

n7,n8,n9,array3 = kochSnowflakeImpl(p3,p2)

for i in array1:

array.append(i)

for j in array2:

array.append(j)

for k in array3:

array.append(k)

else:

n1,n2,n3,array1 = kochSnowflakeImpl(p1,p2)

n11,n21,n31,array11 = kochSnowflakeImpl(n1,n3)

n12,n22,n32,array12 = kochSnowflakeImpl(n3,n2)

n4,n5,n6,array2 = kochSnowflakeImpl(p2,p3)

n41,n52,n61,array21 = kochSnowflakeImpl(n4,n6)

n42,n52,n62,array22 = kochSnowflakeImpl(n6,n5)

n7,n8,n9,array3 = kochSnowflakeImpl(p1,p3)

n71,n81,n91,array31 = kochSnowflakeImpl(n7,n9)

n72,n82,n92,array32 = kochSnowflakeImpl(n9,n8)

for i in array1:

array.append(i)

for i in array11:

array.append(i)

for i in array12:

array.append(i)

for j in array2:

array.append(j)

for j in array21:

array.append(j)

for j in array22:

array.append(j)

for k in array3:

array.append(k)

for k in array31:

array.append(k)

for k in array32:

array.append(k)

level -= 1

return array

if __name__=='__main__':

points = kochSnowflake(5)

x,y = zip(*points)

plt.plot(x, y)

plt.show()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值