用python编写蝴蝶曲线的动画

关于turtle库,网上已经有了很多的知识和经验,这里不再赘述,仅仅说一下本人在学习中设计的一个蝴蝶动画,以供参考。

引入的库为:

import turtle as pen
import numpy as np

然后是对画图区域的设置:

包括:

  1. 标题
  2. 大小
  3. 隐藏画笔
screen = pen.getscreen()  #获取pen的屏幕
screen.title("Python蝴蝶动画")  #设置屏幕的标题
pen.screensize(500, 500, bg="grey") #设置绘图区和背景色
pen.shapesize(0.5,0.5,1)#设置画笔的比例,这里是没用的因为是隐藏画笔
pen.hideturtle()#隐藏画笔

设置两个变量:

pointnumber = 2000#设置蝴蝶点数
screenCoe=50#设置蝴蝶上点与绘图的比例

设计一个画笔函数,也可以直接写在画蝴蝶曲线的函数中。

'''
画像素点,如果画不笔抬起,则是画直线
'''
def drawPixel(x,y):
    pen.down()#画笔按下
    pen.goto(x,y)#画笔到(x,y)位置

根据蝴蝶曲线公式,获得蝴蝶曲线上的点,采用直线段逼近蝴蝶曲线。

'''
    计算蝴蝶上的点数据(共n个点)
'''
def drawButterfly(n):
    px = []#设置x轴数据链表
    py = []#设置y轴数据链表
    for num in range(0,n-1):
        t = 12*np.pi*num/(n-1)
        x = np.sin(t)*(np.e**np.cos(t) - 2*np.cos(4*t)-np.sin(t/12)**5)
        y = np.cos(t)*(np.e**np.cos(t) - 2*np.cos(4*t)-np.sin(t/12)**5)
        px.append(x)
        py.append(y)   
    return(px,py)

然后根据蝴蝶曲线上的点数据,开始花蝴蝶曲线(直线段逼近)

(px1,py1) = drawButterfly(pointnumber)  #获取点数据

for num in range(1,len(px1)):
    if num==1:#将画图移动到第一个点
        pen.penup()
        pen.goto(px1[num]*screenCoe,py1[num]*screenCoe)              #设置图片点的比例,以与绘图区匹配
    else:
        if px1[num]<0:#左侧设置一种颜色
            pen.color("gold")      
        else:#右侧设置一种颜色
            pen.color("gold")
        pen.delay(0)#画笔无延迟
        pen.speed(0)#画图的速度
        drawPixel(px1[num]*screenCoe,py1[num]*screenCoe)
pen.done()#画图完成

然后得到的结果为:

用python编写蝴蝶曲线的动画_第1张图片

然后,将生成的.py文件生成可执行程序。

在cmd中,输入

pyinstaller -F -w -i E:\03Code\python\butterfly.ico -n 蝴蝶动画 E:\03Code\python\UserPython_UserButterfly.py

然后获得:

用python编写蝴蝶曲线的动画_第2张图片

完整源码:https://download.csdn.net/download/yang19861007/12382079

你可能感兴趣的:(Python编程,图形操作)