Python turtle绘制图形
本程序旨在通过调整不同的参数,绘制出优美的数学图形。程序调用了python的turtle库函数以及特定的规则来实现图形的绘制。
禁转载
效果
实现思路
一、先绘制圆点
二、绘制直线
每个点都有一个标号index
假设权值value输入的是2.0,dot_number=20
那么绘图程序将从0开始,每轮循环都让笔绘制直线一直移动到下标为当前index的value倍的圆点处。由于 0 * 2 = 0,笔不移动,0暂时不与其他点相连。每个点的下标计算公式为index*value。现假设value=2
★index=1:结果为1 * 2=2,所以将index=1和index=2的点相连;
此时for循环会执行index+=1,即index加1
★index=2:执行2 * 2=4,此时将2和4相连 index+=1
★index=3:执行3 * 2=6,此时将3和6相连 index+=1
★index=4:执行2 * 4=8,此时将4和8相连
index+=1 ……
以此类推
三、绘制完成
经过dot_number次循环后绘制完成。
可以发现每一个点的与下标为index * value的点相连。其中有个特殊情况,即10与0相连,此时0对应20。
只需要 i * value % dot_number就能保证下标不越界。
“%”为取余数符号
……
若value=2,3,4,5…n,下标为index的点始终与下标为index*value的点相连,要在这两个点之间画直线。
代码
import turtle as tt
dot_number = int(input("Please input the total number of dots: ")) # 提示用户输入总共需要画出的点的数目,需为非负整数
value = float(input("Please input the weight of the formula: ")) # 提示用户输入权值,应为浮点数或者整数
angle = 360 / dot_number # 将圆形分为 dot_number 个部分
dot_position = [] # 存入每个点的坐标
# 因为下面一行要将笔移动到坐标(0,-200)的地方,而且没有将笔提起来的动作的话,程序默认笔为放下的状态。此时若不将笔提起来,则移动笔的过程中会绘制直线
tt.penup()
tt.goto(0, -200) # 将笔移动到坐标为(0,-200)的地方
tt.pendown() # 将笔放下,准备绘制点
tt.pencolor('pink') # 设置当前笔的颜色为粉色,下面绘制点的时候,会用粉色绘制
for i in range(0, dot_number): # 绘制点的for循环,一共循环dot_number次
tt.dot(5) # 点的大小
tt.penup() # 提笔
tt.circle(200, -angle) # 半径为200,角度为angle,加负号是顺时针旋转,将笔顺时针旋转angle的角度
dot_position.append(tt.pos()) # 存入当前点的坐标,方便后面的直线绘制
tt.pensize(1) # 设置绘制直线的宽度为 1
tt.pencolor("lightblue") # 设置笔的颜色为 浅蓝色
tt.speed(10) # 绘制速度为 10
for i, v in enumerate(dot_position): # 循环绘制直线,有多少个点就循环多少次
tt.penup()
tt.goto(v) # 首先去到坐标为 v的地方
tt.pendown() # 放笔,以便画直线
tt.goto(dot_position[int(i * value % dot_number)]) # 画直线一直到下标为 index * value的点
tt.hideturtle() # 隐藏笔,使图形完整地显示出来
tt.done() # 绘制完成