意外看到 Python 的turtle海龟绘图模块,就是这绘制一个在Blender里面会者的费马螺旋,效果还不错,方便快捷。

错误的费马螺旋

效果展示

image.png

代码

  1. """这是一个绘制螺旋图形的代码"""
  2. # Start
  3. from turtle import*
  4. counts = 250
  5. Cond = 1
  6. x = 1
  7. speed(30)
  8. dot(5,"black")
  9. dotdiam = 5
  10. while(Cond < counts ):
  11. startradius = 1
  12. angle = 137.5
  13. radius = startradius * x
  14. if Cond < 100:
  15. dotdiam = dotdiam + 0.2
  16. else:
  17. dotdiam = dotdiam - 0.1
  18. penup()
  19. circle(radius,angle)
  20. pendown()
  21. dot(dotdiam,"black")
  22. Cond = Cond + 1
  23. x = x + 1

正确的画法

参考:https://www.zhihu.com/question/24470349

规律

如果假设N为点的序号那么原点就是第0个点,N=0接下来偏移的第1个点为N=1,假设第一个偏移的半径是R

  • 偏移角度:05 支线-Turtle模块绘制费马螺旋 - 图2
  • 偏移半径:05 支线-Turtle模块绘制费马螺旋 - 图3

    效果展示

    image.png

    代码

    ```python “””这是一个绘制螺旋图形的代码”””

    Start

from turtle import*

counts = 250 Cond = 1 dotdiam = 20

speed(30) dot(dotdiam,”black”)

while(Cond < counts ):

  1. startradius = 20
  2. angle = 137.5
  3. radius = (Cond ** 0.5) * startradius
  4. if Cond < 100:
  5. dotdiam = dotdiam
  6. else:
  7. dotdiam = dotdiam
  8. penup()
  9. circle(radius,angle)
  10. pendown()
  11. dot(dotdiam,"black")
  12. Cond = Cond + 1
  1. <a name="pAnsA"></a>
  2. # 其他练习
  3. ![image.png](https://cdn.nlark.com/yuque/0/2021/png/22003142/1637845091194-bdb2a8cb-39af-454c-b240-8a921fe15eca.png#clientId=ufa6353e6-27f4-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=405&id=u2f652769&margin=%5Bobject%20Object%5D&name=image.png&originHeight=810&originWidth=1853&originalType=binary&ratio=1&rotation=0&showTitle=false&size=215867&status=done&style=none&taskId=u55d33425-6502-43c7-aaa5-7bc5ecc5970&title=&width=926.5)
  4. ```python
  5. #### 这是一个绘制回字形方格图形的代码 #####
  6. from turtle import *
  7. l = int (input ("请输入初始方框边长:")) #让用户输入初始方框的边长
  8. couts = int(input("请输入绘制的圈数:")) #让用户输入绘制的圈数,也是程序运行时未画的圈数
  9. ex = int(input("请输入递增间距:")) #让用户输入两个方框之间的间距
  10. speed(10)
  11. color("red")
  12. while (couts != 0): #当剩余圈数不是0时,进入循环绘制
  13. tl = l / 2 #以中心(0,0)作为方框的中心,那么取一半作为方框点的坐标
  14. if couts != 0: #当剩余圈数不是0时,进入ture条件分支
  15. pu() #抬起笔尖
  16. goto(-tl,tl) #移动到第一个点
  17. pd() #落下笔刷,准备绘制
  18. goto(tl,tl) #绘制到第二个点
  19. goto(tl,-tl) #绘制到第三个点
  20. goto(-tl,-tl) #绘制到第四个点
  21. goto(-tl,tl) #绘制到第一个点,闭合方框
  22. couts = couts - 1 #减去1圈,得到剩余圈数
  23. l = l + ex *2 #计算下一圈的边长
  24. continue #循环继续
  25. else :
  26. break #绘制完毕,跳出循环
  27. mainloop() #绘制结束,不自动退出Python Turtle窗口