话不多说直接上代码:
import turtle
import math
def go_centre(zuobiao): # 此函数实现初始笔点左上移(因为本代码五角星是顺时针画,即在右下角)
hang_list = []
lie_list = []
for hang, lie in zuobiao:
hang_list.append(hang)
lie_list.append(lie)
a = max(hang_list) - min(hang_list)
b = max(lie_list) - min(lie_list)
angle = math.atan(b/a)
length = (math.sqrt(a*a + b*b))/2
turtle.penup()
turtle.left(180-angle)
turtle.forward(length)
turtle.right(180-angle)
turtle.pendown()
turtle.screensize(500,500,'black') # 以下实现画图初始化
turtle.color('white')
turtle.hideturtle()
zuobiao = [] # 以下实现不同极点的坐标积累
turtle.penup()
for i in range(5):
zuobiao.append(turtle.position())
turtle.speed(5)
turtle.forward(100)
turtle.right(144)
turtle.pendown()
go_centre(zuobiao) # 实现笔头移位
turtle.begin_fill() # 以下实现画五角星
for i in range(5):
turtle.speed(5)
turtle.forward(100)
turtle.right(144)
turtle.end_fill()
turtle.done() # 实现窗口停留
就是以所画图象矩形对角线的中点来大致作为可以把图象画在坐标原点的中点。
因为无论什么样的图形,它都能包含进一个矩形里,而矩形对角线的中点就可以近似作为这个图形的中点,把中点放在原点上,不就是图象在中心了吗。
def go_centre(zuobiao): # 此函数实现初始笔点左上移(因为本代码五角星是顺时针画,即在右下角)
hang_list = []
lie_list = []
for hang, lie in zuobiao:
hang_list.append(hang)
lie_list.append(lie)
a = max(hang_list) - min(hang_list)
b = max(lie_list) - min(lie_list)
angle = math.atan(b/a)
length = (math.sqrt(a*a + b*b))/2
turtle.penup()
turtle.left(180-angle)
turtle.forward(length)
turtle.right(180-angle)
turtle.pendown()
此函数就是令开始画的点移到上图视黄线的末端,从那里开始画。(因为本代码图象画出来是在坐标系的第四象限,所以就往左上方移,各位在参考时可以改一下相关内容)
zuobiao = [] # 以下实现不同极点的坐标积累
turtle.penup()
for i in range(5):
zuobiao.append(turtle.position())
turtle.speed(5)
turtle.forward(100)
turtle.right(144)
turtle.pendown()
因为此函数要用到图象所以极点的坐标,就要在开始时进行坐标的收集(就先让它画一遍),各位不要忘了把画笔抬起来。
但经过实践,图象越大,误差就越大,毕竟是简单方法嘛
综上就这么多,这是我第一次学习的结果,就供各位参考,如有更好的方法请在评论区指点
这是我第二次发帖,不喜勿喷!