tkinter_远细近粗绕三轴旋转方形弹簧曲线(3D动画)

 

from math import *;from tkinter import *;import random as rnd;
# 算法设计:项道德(daode1212,daode3056),2021-09-26
# 使用tkinter绘图:
root = Tk()
canvas = Canvas(width=1200, height=800, bg="#000")
canvas.pack()
x0=600;y0=400;xa=x0;yb=y0

#绘制背景圆:
canvas.create_oval(x0-225,    y0-225,    x0+225,    y0+225,
tag="p_" + str(0), width=1, fill="#006")

def sign(x):
    if x>0:
        return 1
    if x<0:
        return -1
    if x==0:
        return 0

s=0.0
while s<3600: #总时间控制
    s=s+0.01 #旋转速度
    for t in range(0, 3600, 5):  # 总循环多少次
        g=s+t/200;

        #生成曲线点:
        R=70
        xc=cos(g*7)
        yc=sin(g*7)
        zc=(t-1800)/100

        #项氏方化变换:
        xc=R*sign(xc)*pow(xc*xc,0.1)
        yc=R*sign(yc)*pow(yc*yc,0.1)
        zc=R*sign(zc)*pow(zc*zc,0.1)

        #绕Z轴旋转空间点:
        x1=xc*cos(s/2)-yc*sin(s/2)
        y1=xc*sin(s/2)+yc*cos(s/2)
        z1=zc

        #绕Y轴旋转空间点:
        x2=x1*cos(s*3)-z1*sin(s*3)
        y2=y1
        z2=x1*sin(s*3)+z1*cos(s*3)

        #绕X轴旋转空间点:
        x3=x2
        y3=y2*cos(s/4)-z2*sin(s/4)
        z3=y2*sin(s/4)+z2*cos(s/4)

        #处理远近,以不同的粗细与颜色呈现,再以线段集方式绘制曲线:
        rgb = "#"+str(hex(0x700000+t%0x8FFFFF))[2:]  # 生成颜色
        if z3<0:
            rgb="#224"; #背面曲线颜色
        if t>0:
            canvas.create_line(x0+xa,y0+yb,x0+x3,y0+y3,
                tag="L_" + str(t), width=(z3/20 if z3>0 else 2) , fill=rgb)
        xa=x3;yb=y3 #替换线段起点

    #画布更新:
    canvas.update()

    # 重绘前删除已经绘制图像:
    for t in range(0, 3600, 5):
        canvas.delete("L_" + str(t))

root.mainloop()

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值