【Python教程】中秋快到了利用python画个月亮和月饼

零 Python教程1 126字数 2101阅读7分0秒阅读模式

所需工具:

Python

聪明的大脑文章源自灵鲨社区-https://www.0s52.com/bcjc/pythonjc/7406.html

勤劳的双手文章源自灵鲨社区-https://www.0s52.com/bcjc/pythonjc/7406.html

 文章源自灵鲨社区-https://www.0s52.com/bcjc/pythonjc/7406.html

注意:本站只提供教程,不提供任何成品+工具+软件链接,仅限用于学习和研究。文章源自灵鲨社区-https://www.0s52.com/bcjc/pythonjc/7406.html

 文章源自灵鲨社区-https://www.0s52.com/bcjc/pythonjc/7406.html

目录

  • 月亮
  • 雪花月饼

 文章源自灵鲨社区-https://www.0s52.com/bcjc/pythonjc/7406.html

一、月亮

文章源自灵鲨社区-https://www.0s52.com/bcjc/pythonjc/7406.html

导入库matplotlib和numpy,作为工具直接用。文章源自灵鲨社区-https://www.0s52.com/bcjc/pythonjc/7406.html

  1. from mpl_toolkits.mplot3d import Axes3D
  2. import matplotlib.pyplot as plt
  3. import numpy as np

布局文章源自灵鲨社区-https://www.0s52.com/bcjc/pythonjc/7406.html

创建一个长宽的一个画布大小文章源自灵鲨社区-https://www.0s52.com/bcjc/pythonjc/7406.html

  1. fig = plt.figure(figsize=(10,5))

布置3D视角

  1. ax = fig.add_subplot(121, projection='3d')

生成等差数列的数据,画出一个球体

  1. x = np.linspace(0, 2 * np.pi, 100)
  2. y = np.linspace(0, np.pi, 100)
  3. x1 = 10 * np.outer(np.cos(x), np.sin(y))
  4. y1 = 10 * np.outer(np.sin(x), np.sin(y))
  5. z = 10 * np.outer(np.ones(np.size(x1)), np.cos(y1))
  6. ax.plot_surface(x1, y1, z, color='yellow')

此时我们发现只画了一个月亮,所以我们打算画第二个月亮,凑成一对~

  1. ax = fig.add_subplot(122, projection='3d')
  2. x = np.linspace(0, 2 * np.pi, 100)
  3. y = np.linspace(0, np.pi, 100)
  4. x1 = 10 * np.outer(np.cos(x), np.sin(y))
  5. y1 = 10 * np.outer(np.sin(x), np.sin(y))
  6. z = 10 * np.outer(np.ones(np.size(x1)), np.cos(y1))
  7. ax.plot_surface(x1, y1, z, color='r')

效果图

还可以吧~哈哈哈哈!

 

二、雪花月饼

导入所需要的库,用的比较多的是turtle这个库来写的~

  1. import turtle
  2. import time

我们先画一个底层的黄黄的饼作为底部~

  1. def circle():
  2. fillX_y(0, 0)
  3. turtle.color("#F0E68C")
  4. for _ in range(30):
  5. turtle.left(12)
  6. turtle.begin_fill()
  7. turtle.forward(230)
  8. turtle.circle(25, 180)
  9. turtle.goto(0, 0)
  10. turtle.left(180)
  11. turtle.end_fill()
  12. time.sleep(0.5)

既然是雪花月饼,就应该是有雪花,接下来我们来画雪花吧!

采用科赫曲线进行画雪花。要改变弯曲程度。

  1. def koch(size, n): # 定义弯曲的直线使其有棱角
  2. if n == 0:
  3. turtle.fd(size)
  4. else:
  5. for angle in [0, 60, -120, 60]: # 每一次都对其进行合理的角度改变
  6. turtle.left(angle)
  7. koch(size / 3, n - 1)

因为打算画八个,并且加上颜色,所以七彩雪花~

  1. if a == 1:
  2. turtle.color("black") # 控制画笔的颜色
  3. elif a == 2:
  4. turtle.color("purple")
  5. elif a == 3:
  6. turtle.color("blue")
  7. elif a == 4:
  8. turtle.color("Cyan")
  9. elif a == 5:
  10. turtle.color("green")
  11. elif a == 6:
  12. turtle.color("yellow")
  13. elif a == 7:
  14. turtle.color("orange")
  15. elif a == 8:
  16. turtle.color("red")

由于是八个雪花嵌套的,所以要进行一个等比缩放的包裹。

  1. turtle.penup()
  2. turtle.goto(-200 * (4 / 7) ** (s - n), 100 * (4 / 7) ** (s - n))
  3. # 每一次都是需要合理的等比例的扩大或是缩小
  4. turtle.pendown()
  5. turtle.pensize(2)
  6. level = 5
  7. koch(400 * (4 / 7) ** (s - n), level) # 大小是一个一个试出来的
  8. # 不能超过setup的设定的范围 600,不然就越界了
  9. turtle.right(120)
  10. koch(400 * (4 / 7) ** (s - n), level)
  11. turtle.right(120)
  12. koch(400 * (4 / 7) ** (s - n), level) # 注意这里koch一次就要转一次角度
  13. turtle.right(120)
  14. turtle.hideturtle() # 隐藏画笔
  15. flower(n - 1)

效果图!啊哈哈哈!是雪花月饼呀!

 

最后,希望我的中秋礼品能带给你一丝的欢喜~

提前祝中秋快乐鸭~

零
  • 转载请务必保留本文链接:https://www.0s52.com/bcjc/pythonjc/7406.html
    本社区资源仅供用于学习和交流,请勿用于商业用途
    未经允许不得进行转载/复制/分享
    • lingshajiejie
      lingshajiejie 4

      中秋快乐哟~

    发表评论