科赫曲线是一种不规则碎片,具有递归结构的图形,可以通过下述递归函数的调用画出:
- 将给定线段三等分
- 以三等分点为顶点作出正三角形
- 对线段,线段,线段,线段递归地重复进行上述操作
设端点为,
输入: 1个整数
输出:科赫曲线各顶点的坐标,每个点的坐标占1行。
限制:
问题解决:
当时,求u的坐标时,要用到二维的旋转矩阵
即逆时针旋转60度得到,所以:
由此可以得到u的坐标。
## koch ##
# author:Halie
import math
class point:
def _init_(self):
self.x=0
self.y=0
def koch(n,p1,p2):
if n==0:
return
s,t,u=point(),point(),point()
theta=math.pi / 3
s.x=p1.x+(p2.x-p1.x)/3.
s.y=p1.y+(p2.y-p1.y)/3.
t.x=p2.x-(p2.x-p1.x)/3.
t.y = p2.y - (p2.y - p1.y) / 3.
u.x=math.cos(theta)*(t.x-s.x)-math.sin(theta)*(t.y-s.y) +s.x
u.y = math.sin(theta) * (t.x - s.x) + math.cos(theta) * (t.y - s.y) +s.y
koch(n-1,p1,s)
print("(%.8f,%.8f)"%(s.x,s.y))
koch(n-1,s,u)
print("(%.8f,%.8f)" % (u.x, u.y))
koch(n-1,u,t)
print("(%.8f,%.8f)" % (t.x, t.y))
koch(n-1,t,p2)
p1,p2=point(),point()
p1.x=0
p1.y=0
p2.x=100
p2.y=0
n = int(input("请输入一个整数:"))
print("(%.8f,%.8f)" % (p1.x, p1.y))
koch(n,p1,p2)
print("(%.8f,%.8f)" % (p2.x, p2.y))
补充: