Python之turtle模块-画圈圈

时间:2022-07-22
本文章向大家介绍Python之turtle模块-画圈圈,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

前面我们画过正多边形。下面我们来做两个小实验,看看大家有什么感悟。

实验一

首先我们来画正四边形,正六边形,正八边形......,一直到正三十边形。

这些正多边形的外接圆的半径都是一样的。

实验二

下面再来做一个实验,我们同样画正三十边形,只是这次我们尝试不同的外接圆的半径。

实验结果

  1. 从实验一的结果来看,正多边形的边数越多,样子看上去越接近于圆。
  2. 从实验二的结果来看,虽然都是正三十边形,但是半径小的看上去更“圆润”一些,而半径大的看上去更“棱角分明”一些。

实验结论

利用turtle画圆,实际上我们可以用正多边形来无限逼近,直到人的肉眼无法分别,就算“蒙混过关了”。那不同半径的圆,究竟该用多少边的正多边形来画呢?从实验二可以看出,都是正三十边形,当半径变大后,看上去就不那么圆了,因为每条边的长度变长了。只有当每条边足够短,短到你肉眼无法分别,这才算是一个“合格”的圆。实际操作发现,当边的长度为3左右,人的肉眼就很难分辨了。

下面我们用代码来实现画圆。

import turtle
import math


def polygon(t, n, length):
    # 中心角为360/n
    angle = 360 / n
    # 循环n次画出正n边形的n条边
    for i in range(n):
        # 画边
        t.fd(length)
        # 旋转箭头,因为旋转的角度为外角的角度,刚好也等于中心角
        t.lt(angle)


def circle(t, r):
    # 根据半径计算圆的周长
    circumference = 2 * math.pi * r
    # 这里取多边形的边长为3,计算多边形的边数,int强制转换成整数
    n = int(circumference / 3) + 1
    # 得到边数之后,重新计算多边形的边长,
    # 得到的length这时可能是小数了
    length = circumference / n
    # 调用前面定义的画多边形的函数来画近似的圆
    polygon(t, n, length)


# 定义一个移动的函数,参数有turtle对象,移动方向和移动距离
def move(t, direction, distance):
    # 提笔,再移动不会在画布上留下痕迹
    t.pu()
    # 判断移动方向,fd向前,bk向后,移动相应距离
    if direction == "fd":
        t.fd(distance)
    elif direction == "bk":
        t.bk(distance)
    # 放下笔,再移动会在画布上留下痕迹
    t.pd()


bob = turtle.Turtle()
# 先往后移动200
move(bob, 'bk', 200)
# 循环画圆,半径从50到200,每次增加50
for r in range(50, 200, 50):
    circle(bob, r)
    move(bob, 'fd', 2 * r)
turtle.mainloop()

检验成果的时候到了