【简单代码】Python turtle简单实现任何图象落在窗口中心处(五角星为例)

话不多说直接上代码:

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()  # 实现窗口停留

 就是以所画图象矩形对角线的中点来大致作为可以把图象画在坐标原点的中点。

48ffbdf1ba754b2f8f1830c50b6f6019.png

 因为无论什么样的图形,它都能包含进一个矩形里,而矩形对角线的中点就可以近似作为这个图形的中点,把中点放在原点上,不就是图象在中心了吗。

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()

因为此函数要用到图象所以极点的坐标,就要在开始时进行坐标的收集(就先让它画一遍),各位不要忘了把画笔抬起来。

但经过实践,图象越大,误差就越大,毕竟是简单方法嘛

 综上就这么多,这是我第一次学习的结果,就供各位参考,如有更好的方法请在评论区指点

这是我第二次发帖,不喜勿喷!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值