Python常用模块 之 turtle模块——实现画太极,2024年最新看完全都会了

Yh = 0

def Bezier(p1, p2, t): # 一阶贝塞尔函数

return p1 * (1 - t) + p2 * t

def Bezier_2(x1, y1, x2, y2, x3, y3): # 二阶贝塞尔函数

te.goto(x1, y1)

te.pendown()

for t in range(0, WriteStep + 1):

x = Bezier(Bezier(x1, x2, t / WriteStep),

Bezier(x2, x3, t / WriteStep), t / WriteStep)

y = Bezier(Bezier(y1, y2, t / WriteStep),

Bezier(y2, y3, t / WriteStep), t / WriteStep)

te.goto(x, y)

te.penup()

def Bezier_3(x1, y1, x2, y2, x3, y3, x4, y4): # 三阶贝塞尔函数

x1 = -Width / 2 + x1

y1 = Height / 2 - y1

x2 = -Width / 2 + x2

y2 = Height / 2 - y2

x3 = -Width / 2 + x3

y3 = Height / 2 - y3

x4 = -Width / 2 + x4

y4 = Height / 2 - y4 # 坐标变换

te.goto(x1, y1)

te.pendown()

for t in range(0, WriteStep + 1):

x = Bezier(Bezier(Bezier(x1, x2, t / WriteStep), Bezier(x2, x3, t / WriteStep), t / WriteStep),

Bezier(Bezier(x2, x3, t / WriteStep), Bezier(x3, x4, t / WriteStep), t / WriteStep), t / WriteStep)

y = Bezier(Bezier(Bezier(y1, y2, t / WriteStep), Bezier(y2, y3, t / WriteStep), t / WriteStep),

Bezier(Bezier(y2, y3, t / WriteStep), Bezier(y3, y4, t / WriteStep), t / WriteStep), t / WriteStep)

te.goto(x, y)

te.penup()

def Moveto(x, y): # 移动到svg坐标下(x,y)

te.penup()

te.goto(-Width / 2 + x, Height / 2 - y)

def line(x1, y1, x2, y2): # 连接svg坐标下两点

te.penup()

te.goto(-Width / 2 + x1, Height / 2 - y1)

te.pendown()

te.goto(-Width / 2 + x2, Height / 2 - y2)

te.penup()

def lineto(dx, dy): # 连接当前点和相对坐标(dx,dy)的点

te.pendown()

te.goto(te.xcor() + dx, te.ycor() - dy)

te.penup()

def Lineto(x, y): # 连接当前点和svg坐标下(x,y)

te.pendown()

te.goto(-Width / 2 + x, Height / 2 - y)

te.penup()

def Horizontal(x): # 做到svg坐标下横坐标为x的水平线

te.pendown()

te.setx(x - Width / 2)

te.penup()

def horizontal(dx): # 做到相对横坐标为dx的水平线

te.seth(0)

te.pendown()

te.fd(dx)

te.penup()

def vertical(dy): # 做到相对纵坐标为dy的垂直线

te.seth(-90)

te.pendown()

te.fd(dy)

te.penup()

te.seth(0)

def polyline(x1, y1, x2, y2, x3, y3): # 做svg坐标下的折线

te.penup()

te.goto(-Width / 2 + x1, Height / 2 - y1)

te.pendown()

te.goto(-Width / 2 + x2, Height / 2 - y2)

te.goto(-Width / 2 + x3, Height / 2 - y3)

te.penup()

def Curveto(x1, y1, x2, y2, x, y): # 三阶贝塞尔曲线到(x,y)

te.penup()

X_now = te.xcor() + Width / 2

Y_now = Height / 2 - te.ycor()

Bezier_3(X_now, Y_now, x1, y1, x2, y2, x, y)

global Xh

global Yh

Xh = x - x2

Yh = y - y2

def curveto_r(x1, y1, x2, y2, x, y): # 三阶贝塞尔曲线到相对坐标(x,y)

te.penup()

X_now = te.xcor() + Width / 2

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值