使用 python 绘制万花尺

发布一下 0 0

关键词:python 、 万花尺 、 turtle 、 fractions 模块 、 math 模块

开发环境:PyCharm

版本:python 3.9.5

前言

小时候我们使用设计工具,以落点为原点,沿外层工具大小画出不规则的图案,即为万花尺

使用 python 绘制万花尺

万花尺

原理

大小齿轮的齿数之比,约为最简分数时,其分母就是小齿轮沿大齿轮的公转数,分子就是花瓣数,分子和分母的差就是小齿轮的自转数

公式


效果图

使用 python 绘制万花尺

效果1

使用 python 绘制万花尺

效果2

使用 python 绘制万花尺

效果3

关键代码

# 初始化光标参数def setparams(self, xc,yc,col,R,r,l):    # 设置相关轴线、角度、步长、颜色等    self.xc = xc    self.yc = yc    self.R = int(R)    self.r = int(r)    self.l = l    self.col = col    # 计算最小公约数    gcdVal = math.gcd(self.r, self.R)    self.nRot = self.r     # 得到半径比例    self.k = r / float(R)    # 设置颜色    self.t.color(*col)    # 初始化角度    self.a = 0
# 绘画线条def draw(self):    # 循环画出其余线条    R,k,l = self.R,self.k, self.l    for i in range(0, int(360 * self.nRot + l), self.step):        a = math.radians(i)        x = R * ((l-k) * math.cos(a) + l * k * math.cos((l-k) * a / k))        y = R * ((l-k) * math.sin(a) - l * k * math.sin((l-k) * a / k))        self.t.setpos(self.xc + x, self.yc + y)    # 绘画完成后隐藏光标    self.t.hideturtle()
# 根据步长进行更新坐标def update(self):    # 判断绘画是否完成,是则跳过    if self.drawingComplete:        return    # 增加描绘角度    self.a += self.step    # 根据步长绘制    R,k,l = self.R, self.k, self.l    # 设置角度    a = math.radians(self.a)    # 根据如上公式进行计算    x = self.R * ((l - k) * math.cos(a) + l * k * math.cos((l - k) * a / k))    y = self.R * ((l - k) * math.sin(a) - l * k * math.sin((l - k) * a / k))    self.t.setpos(self.xc + x, self.yc + y)    # 如果绘画完成,则标记    if self.a >= 360 * self.nRot:        self.drawingComplete = True        # 绘画完成后隐藏光标        self.t.hideturtle()

https://pan.baidu.com/s/1ly15zaPWr-L2guKJGk6VmQ

提取码: 62wj 复制这段内容后打开百度网盘手机App,操作更方便哦

版权声明:内容来源于互联网和用户投稿 如有侵权请联系删除

本文地址:http://0561fc.cn/177844.html