Python turtle 画正多边形和多角形
Python turtle 画正多边形和多角形作正多边形作正多角形计算内角画图代码作棱角分明的多角形观察棱角分明的多角形简洁的结论代码高斯与正十七边形作出正十七角形思考原创文章,转载请申明出处作正多边形正n边形的内角和:x = (n - 2) * 180° / nimport turtle# 正n边形参数n = 7x = (n - 2) * 180 / n# 调整画笔速度...
原创文章,转载请申明出处
作正多边形
正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角形图如下:
所以,我们要让两个最远的顶点连起来
观察棱角分明的多角形
不妨大胆猜测规律:
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()
代码存在的问题
代码根据锐顶角来画图,而锐顶角由结论来计算。
棱角分明的正n角形锐顶角w
w = 180 / n (n为奇数)
w = 360 / n (n为偶数)
存在奇数n1,偶数n2使得w1==w2。如3和6、5和10、7和14……
这些奇偶对得到的w相同,所以画出的图形相同。
想象中,正10角形是这样的:
实际上是这样的:
问题分析
- 只看奇数,所有的奇数中不可能产生相同的w。
- 把偶数分为两类:是4的倍数,不是4的倍数。
- 不是4的倍数,360 / n 约去2后,变为 180 / 奇数,必存在一奇数的w与之相等。所以,程序无法画出(可以另写程序画出)。
高斯与正十七边形
下图是网友提供的高斯墓碑图:
作出正十七角形
总结
turtle画图形,方向旋转360°时,回到原来的方向,可以以此来计算循环画图次数。
画作多边形时,很多结论都是通过画图,肉眼观察出来的,缺乏严密证明。
最后,如果同学们发现文中错误,欢迎指正。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)