教你学画画05---如何用 Python Turtle 绘制常规星形多边形

在这里插入图片描述
如果您是一名涂鸦者,那么您肯定曾在生活中的某个时刻涂鸦过五角星或大卫之星。
在这里插入图片描述
也许你们中的一些人还尝试添加更多线条来绘制更复杂的星星。你知道这些星星也有名字吗?

在这里插入图片描述

无论如何,我认为尝试用 Python 绘制这些星星可能会很有趣。所以让我们开始绘制这些多边形

星星是多边形吗?

原来上面的星星是一类叫做复杂多边形的多边形。基本上,与普通多边形相反,这些线在复杂多边形中彼此相交
在这里插入图片描述
星形多边形是一种复杂的多边形。并且有两种类型。你一定已经意识到,要在一张纸上画大卫之星,你必须举起你的笔,但你不必这样做来画五角星。前一种类型的恒星称为规则星形多边形,而后一种类型称为退化星形多边形
在这里插入图片描述

规则星多边形的规则

正如您在上面可能已经注意到的,我们可以通过多种方式绘制具有一定数量顶点的星形。例如,您可以绘制一个具有 9 个顶点的星形多边形,如下所示:
在这里插入图片描述
要了解发生了什么,请计算上述每个图中跳过的顶点数。还要注意,当跳过 2 个顶点时,恒星是退化的,而在其他情况下,恒星是规则的。您可以尝试跳过更多顶点,但最终会绘制相同的星星。

以下是对我们有用的规则和公式

  1. 对于带有N顶点的星星,您可以绘制abs(N/2)-1星星

例如,对于具有 9 个顶点的星星,您只能绘制abs(9/2)-1=3星星

  1. 星的顺序M可以定义为跳过的顶点数+1。

因此,对于 1、2 和 3 个顶点分别跳过的 9 顶点星的可能顺序是 2、3 和 4

  1. 如果N被 整除M,则恒星退化

恒星的外角

在我们追踪恒星之前,我们需要知道角度,特别是外角。这是为了知道每次向前移动后乌龟转动多少。我们不会严格地推导出公式,而只会尝试理解以下内容:

当海龟从一个点开始,绕一圈然后返回时,总是转一圈360度(也是多边形外角和=360度的原因)
在星星的情况下,海龟执行多次完整旋转
旋转的次数等于星的阶数—— M
因此,恒星的外角和为 360M
这意味着对于具有N顶点的每个外角的规则星=360
M/N
希望这足够有说服力

废话不多说让我们画画

现在我们了解了我们最喜欢的涂鸦,我们准备在 Python 乌龟中对其进行编码。请注意,转弯角度设置为我们刚刚讨论的

import turtle as t

LENGTH=500

def regular_star(n,m):
    """Draws a regular star polygon (not a degenerate one)
       n = number of pointies
       m = number of points to skip
    """

    angle = 360*m/n 

    for count in range(n):
       t.forward(LENGTH)
       t.right(angle)


t.hideturtle()
t.pensize(2)
t.color("green")

regular_star(103,51)

上面的代码只绘制了任何规则的星形多边形(不用提笔就可以绘制的那个)。我们将留到另一个帖子来画一颗退化的星星

这是一颗 103 尖的星星
在这里插入图片描述
耶!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

初遇我ㄖ寸の热情呢?

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值