Python turtle 画正多边形和多角形


原创文章,转载请申明出处

作正多边形

正n边形的内角:x = (n - 2) * 180° / n

import turtle

# 正n边形参数
n = 7
x = (n - 2) * 180 / n

# 调整画笔速度
turtle.speed(1)
# 调整画笔颜色
turtle.color('green')
# 调整画笔宽度
turtle.pensize(3)

for _ in range(n):
	# 画笔向前移动
	turtle.forward(100)
	# 画笔方向顺时针旋转
	turtle.right(180 - x)

turtle.done()

在这里插入图片描述

作正多角形

最简单的多角形就是五角星形
五角星形

计算内角

下面是我的方法,如果同学有自己的方法,欢迎在评论区分享。
五角星形说明

如图所示,五角星中间有个正五边形,计算得正五边形的内角为108°
图中的小三角形是等腰三角形,所以五角星的锐内角为(180 - 2*72) = 36°
正六边形,正七边形……同理。
所以得到正n角形锐内角公式:z = 2x - 180 其中:x = (n - 2) * 180 / n
化简得:z = (1 - 4/n) * 180°

画图代码

import turtle

# 正n角形参数
n = 7
# 计算正n边形内角
x = (n - 2) * 180 / n
# 计算正n角形锐内角
z = (1 - 4/n) * 180

# 调整画笔速度
turtle.speed(1)
# 调整画笔颜色
turtle.color('green')
# 调整画笔宽度
turtle.pensize(3)

for _ in range(n):
    """每次画一个角"""
    turtle.forward(50)
    turtle.right(180 - z)
    turtle.forward(50)
    turtle.left(180 - x)

turtle.done()

正七角形

作棱角分明的多角形

如果正n角形,每次都把两个相邻顶点连起来,那么随着n的增加,图像将趋近于

正19角形图如下:
正19边形
所以,我们要让两个最远的顶点连起来

观察棱角分明的多角形

棱角分明的正七角形
棱角分明的正9角形
在这里插入图片描述

不妨大胆猜测规律:
n为奇数,棱角分明的正n边形锐顶角:w = (n-1)/2 * x - (n-3)/2 * 180
又 x = (n - 2)*180 / n
化简得:w = 180 / n
对于n为偶数,画图分析后,得出结论:w = 360 / n

简洁的结论

棱角分明的正n角形锐顶角w
w = 180 / n (n为奇数)
w = 360 / n (n为偶数)
统一公式:w = 90/n * (3+(-1)n)

代码

import turtle

# 正n角形参数
n = 7
# 计算棱角分明的正n角形锐内角
w = 90/n * (3 + (-1)**n)

# 调整画笔速度
turtle.speed(3)
# 调整画笔颜色
turtle.color('green')
# 调整画笔宽度
turtle.pensize(3)

for _ in range(n):
    """每次一条边加转向"""
    turtle.forward(150)
    turtle.right(180 - w)

turtle.done()

棱角分明的正7角形

代码存在的问题

代码根据锐顶角来画图,而锐顶角由结论来计算。

棱角分明的正n角形锐顶角w
w = 180 / n (n为奇数)
w = 360 / n (n为偶数)

存在奇数n1,偶数n2使得w1==w2。如3和6、5和10、7和14……
这些奇偶对得到的w相同,所以画出的图形相同。
想象中,正10角形是这样的:
正10角形
实际上是这样的:
画出来的正10角形
问题分析

  1. 只看奇数,所有的奇数中不可能产生相同的w。
  2. 偶数分为两类:是4的倍数不是4的倍数
  3. 不是4的倍数,360 / n 约去2后,变为 180 / 奇数,必存在一奇数的w与之相等。所以,程序无法画出(可以另写程序画出)。

高斯与正十七边形

李永乐老师讲正十七边形

下图是网友提供的高斯墓碑图:
热心网友提供的高斯墓碑图

作出正十七角形

作出正17角形

总结

turtle画图形,方向旋转360°时,回到原来的方向,可以以此来计算循环画图次数。
画作多边形时,很多结论都是通过画图,肉眼观察出来的,缺乏严密证明。
最后,如果同学们发现文中错误,欢迎指正。

### 回答1: 可以使用turtle库中的circle函数来正多边形。具体步骤如下: 1. 导入turtle库 ```python import turtle ``` 2. 创建布和笔 ```python canvas = turtle.Screen() pen = turtle.Turtle() ``` 3. 设置笔的颜色和粗细 ```python pen.color('red') pen.pensize(2) ``` 4. 定义正多边形的边数和边长 ```python num_sides = 6 # 正六边形 side_length = 100 # 边长为100 ``` 5. 计算正多边形的内角数 ```python interior_angle = (num_sides - 2) * 180 / num_sides ``` 6. 循环正多边形的每条边 ```python for i in range(num_sides): pen.forward(side_length) pen.left(180 - interior_angle) ``` 7. 关闭布 ```python canvas.exitonclick() ``` 完整代码如下: ```python import turtle canvas = turtle.Screen() pen = turtle.Turtle() pen.color('red') pen.pensize(2) num_sides = 6 # 正六边形 side_length = 100 # 边长为100 interior_angle = (num_sides - 2) * 180 / num_sides for i in range(num_sides): pen.forward(side_length) pen.left(180 - interior_angle) canvas.exitonclick() ``` ### 回答2: 使用Python绘制正多边形,可以利用turtle模块中的circle函数来实现。该函数可以绘制一个指定半径和边数的圆形,通过调整参数可以使其变为一个正多边形。 首先,我们需要导入turtle模块: ```python import turtle ``` 然后,可以创建一个布,并设置其背景色和笔颜色: ```python screen = turtle.Screen() screen.bgcolor("white") turtle.color("black") ``` 接下来,可以创建一个turtle对象,并设置其形状为箭头: ```python pen = turtle.Turtle() pen.shape("arrow") ``` 然后,可以定义一个函数来绘制正多边形。该函数需要传入两个参数,分别为半径和边数: ```python def draw_polygon(radius, sides): angle = 360 / sides # 计算出每个内角的数 for _ in range(sides): pen.forward(radius) # 前进半径的距离 pen.right(angle) # 右转指定角 ``` 在主程序中,可以调用该函数来绘制正多边形。比如,可以绘制一个边长为100的正五边形: ```python draw_polygon(100, 5) ``` 最后,不要忘记调用turtle模块中的done函数来保持窗口不关闭: ```python turtle.done() ``` 通过上述步骤,我们就能够使用Python绘制一个正多边形了。 ### 回答3: 在Python中,可以使用turtle模块的circle函数来绘制正多边形。首先,我们需要导入turtle模块。 ```python import turtle ``` 然后,创建一个布和一个笔。 ```python window = turtle.Screen() pen = turtle.Turtle() ``` 接下来,我们可以使用circle函数来绘制正多边形正多边形的每个内角都相等,因此我们可以通过改变circle函数的半径和角参数来实现。 ```python pen.circle(100, steps=6) # 绘制边长为100的六边形 ``` 其中,第一个参数表示圆的半径,第二个参数steps表示多边形的边数。 最后,我们需要保持窗口不关闭,以便查看绘制的图形。 ```python turtle.done() ``` 以上就是使用Pythonturtle模块绘制正多边形的基本步骤。可以根据需要调整半径和边数来绘制不同大小和形状的正多边形
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值