鱼C论坛

 找回密码
 立即注册
查看: 5031|回复: 23

[作品展示] 【转载】中秋节快乐|中秋节小程序 庆祝中级鱼油I

[复制链接]
发表于 2022-9-11 07:13:33 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 青出于蓝 于 2022-9-11 21:21 编辑
各位大家好,终于中级鱼油I了,同时也是庆祝中秋节,给大家上一段代码

今天来我们就来画一个月饼,冲冲冲!!!

画这样一个月饼,其实不需要太多的代码,笔者只用了不到50行代码,而且用的是我们经常用到的绘图库matplotlib,这对于我们大部分人来说是很容易上手的,下面笔者就详细介绍一下怎么画这样一个月饼。
首先导入各种需要的库:
  1. import numpy as np
  2. from numpy import sin, cos, pi
  3. import matplotlib.pyplot as plt
  4. import matplotlib.patches as mpatch
  5. from matplotlib.patches import Arc, Circle, Wedge
  6. from matplotlib.collections import PatchCollection
复制代码
然后设置3个变量,这3个变量的用途到后面会有解释:
  1. length = 20
  2. R = 3**0.5*length/(3**0.5*cos(pi/12)-sin(pi/12))
  3. r = 2*sin(pi/12)*R/3**0.5
复制代码
接下来我们要画12条弧线,这12条弧线是月饼边缘的花纹:
  1. arc1 = Arc([0, length], width=2*r, height=2*r, angle=0, theta1=30, theta2=150, ec='orange', linewidth=4)
  2. arc2 = Arc([-length/2, length/2*3**0.5], width=2*r, height=2*r, angle=0, theta1=60, theta2=180, ec='orange', linewidth=4)
  3. arc3 = Arc([-length/2*3**0.5, length/2], width=2*r, height=2*r, angle=0, theta1=90, theta2=210, ec='orange', linewidth=4)
  4. arc4 = Arc([-length, 0], width=2*r, height=2*r, angle=0, theta1=120, theta2=240, ec='orange', linewidth=4)
  5. arc5 = Arc([-length/2*3**0.5, -length/2], width=2*r, height=2*r, angle=0, theta1=150, theta2=270, ec='orange', linewidth=4)
  6. arc6 = Arc([-length/2, -length/2*3**0.5], width=2*r, height=2*r, angle=0, theta1=180, theta2=300, ec='orange', linewidth=4)
  7. arc7 = Arc([0, -length], width=2*r, height=2*r, angle=0, theta1=210, theta2=330, ec='orange', linewidth=4)
  8. arc8 = Arc([length/2, -length/2*3**0.5], width=2*r, height=2*r, angle=0, theta1=240, theta2=360, ec='orange', linewidth=4)
  9. arc9 = Arc([length/2*3**0.5, -length/2], width=2*r, height=2*r, angle=0, theta1=270, theta2=390, ec='orange', linewidth=4)
  10. arc10 = Arc([length, 0], width=2*r, height=2*r, angle=0, theta1=300, theta2=420, ec='orange', linewidth=4)
  11. arc11 = Arc([length/2*3**0.5, length/2], width=2*r, height=2*r, angle=0, theta1=330, theta2=450, ec='orange', linewidth=4)
  12. arc12 = Arc([length/2, length/2*3**0.5], width=2*r, height=2*r, angle=0, theta1=0, theta2=120, ec='orange', linewidth=4)
复制代码
看到这里估计很多人懵逼了,代码是不是有点多了?
实际上这些弧线都是来自于同一个Arc类,它们的用法都是一样的,只不过部分参数不同,所以我们只要掌握一个,其他的全都会了。这里笔者就用arc1来说明一下:
  1. arc1 = Arc([0, length], width=2*r, height=2*r, angle=0, theta1=30, theta2=150, ec='orange', linewidth=4)
复制代码
其中 [0, length] 是这个Arc弧线的圆心,因为这个Arc类是一个椭圆形的一部分,所以其包含圆心、横轴、纵轴等参数,length变量就是arc1圆心的纵坐标,width=2*r height=2*r 就说明这个椭圆的纵轴和横轴长度相等,其是一个圆,而不是椭圆,变量 r 就是这个圆的半径。angle=0 就是我们不需要对这个圆进行旋转,theta1=30 theta2=150 是指明这个弧线的起始角度和终止角度,这里的角度分别是30度150度
ec='orange' linewidth=4 分别指边线的颜色和线条宽度,颜色我们设为橙色宽度为4。而这些弧线的效果图如图2所示,在图中笔者标出了arc1、arc5和arc9这3条弧线的位置,所有弧线按照逆时针方向排列。这些位置大同小异,大家只要计算好其各自的位置参数就行,这里就不再赘述了。

arc图标

arc图标

然后我们再画一个圆,这个圆是月饼的主体部分,其圆心和整个月饼的中心是重合的,圆心位置我们选在了坐标原点,代码如下:
  1. circle = Circle((0,0), R, ec='orange', fc='white', linewidth=4)
复制代码

接下来我们再画上一些花纹,这些花纹主要由8个扇形组成,其中有4个大的扇形和4个小的扇形,代码如下:
  1. wedge1 = Wedge([-2, 2], R-5, 90, 180, ec='orange', fc=r'white', linewidth=4)
  2. wedge2 = Wedge([-5, 5], R-12, 90, 180, ec='orange', fc=r'white', linewidth=4)
  3. wedge3 = Wedge([-2, -2], R-5, 180, 270, ec='orange', fc=r'white', linewidth=4)
  4. wedge4 = Wedge([-5, -5], R-12, 180, 270, ec='orange', fc=r'white', linewidth=4)
  5. wedge5 = Wedge([2, -2], R-5, 270, 360, ec='orange', fc=r'white', linewidth=4)
  6. wedge6 = Wedge([5, -5], R-12, 270, 360, ec='orange', fc=r'white', linewidth=4)
  7. wedge7 = Wedge([2, 2], R-5, 0, 90, ec='orange', fc=r'white', linewidth=4)
  8. wedge8 = Wedge([5, 5], R-12, 0, 90, ec='orange', fc=r'white', linewidth=4)
复制代码
这里wedge1、wedge3、wedge5、wedge7是大扇形,wedge2、wedge4、wedge6、wedge8是小扇形,一个大扇形嵌套一个小扇形,其中wedge1嵌套wedge2,wedge3嵌套wedge4,以此类推。Wedge这个类和前面Arc有些类似,不过Wedge是圆的一部分,以wedge1为例:
  1. wedge1 = Wedge([-2, 2], R-5, 90, 180, ec='orange', fc=r'white', linewidth=4)
复制代码
其中 [-2, 2] 是这个Wedge所代表的圆的圆心,R-5 是其半径, 90 180 分别代表起始和终止角度,ecfc linewidth 这些都和前面Arc类的用法相似,这8个扇形的效果图如图4所示。在图中笔者标出了wedge1、wedge2、wedge5和wedge6的位置,所有扇形按照逆时针方向放置。
art_list是我们设置的一个list变量,里面放有arc1到arc12这12个图形,然后再把circle以及8个扇形都加进去。ax.set_aspect('equal')
是设置整个图形x轴和y轴同比例,for a in art_list: ax.add_patch(a) 是把art_list中所有图形加入到画布当中。而 plt.text 这行代码中,-18和-2.5是这个text的左下角的坐标,fontfamily fontsize 分别是文字的字体和大小,bbox 是设置text边框的格式,这些参数也都和前面讲过的很多参数差不多,这里不再赘述。plt.ylim plt.xlim 是设置整个画布的坐标范围。最终效果如图1所示。
当然我们也可以改变图片的颜色,比如设置成蓝色的,如图5所示,这个完全可以根据个人爱好而定
呵呵呵.png


转载自  https://blog.csdn.net/weixin_39732534/article/details/110187674

评分

参与人数 6荣誉 -18 鱼币 -11 贡献 -6 收起 理由
hveagle + 2 + 2 这是第五十万零二次抄袭!
糖甜弯了嘴 -5 -5 -3 请勿抄袭
Hello. -5 -5 -3 尊重原创 脚踏实地
临时号 -5 -5 转载请注明原出处
青出于蓝 -5 -5
wp231957 + 7

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-9-11 07:16:34 From FishC Mobile | 显示全部楼层

回帖奖励 +5 鱼币

对画图并没有兴趣
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-9-11 07:28:09 | 显示全部楼层
wp231957 发表于 2022-9-11 07:16
对画图并没有兴趣

好的,那我再出一期,今天或者明天出(要不然过中秋节了),来一个中秋节赏月风景画怎么样
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-9-11 08:07:06 | 显示全部楼层

回帖奖励 +5 鱼币

谢谢画饼。
中秋快乐
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-9-11 08:09:57 | 显示全部楼层

回帖奖励 +5 鱼币

今天来我们就来画一个月饼,冲冲冲!!!

https://blog.csdn.net/weixin_39732534/article/details/110187674
有必要吗,一次次把别人的作品搬上来还声明原创
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-9-11 08:17:25 From FishC Mobile | 显示全部楼层

回帖奖励 +5 鱼币

青出于蓝 发表于 2022-9-11 08:09
https://blog.csdn.net/weixin_39732534/article/details/110187674
有必要吗,一次次把别人的作品搬上 ...

这算抄袭了吧
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-9-11 08:25:25 | 显示全部楼层

回帖奖励 +5 鱼币

中秋快乐!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2022-9-11 09:56:06 | 显示全部楼层
青出于蓝 发表于 2022-9-11 08:09
https://blog.csdn.net/weixin_39732534/article/details/110187674
有必要吗,一次次把别人的作品搬上 ...

這行為太惡劣了吧...

评分

参与人数 1荣誉 -2 收起 理由
编程追风梦 -2 不要反复灌水

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-9-11 10:27:01 | 显示全部楼层
???
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-9-11 10:43:14 | 显示全部楼层
青出于蓝 发表于 2022-9-11 08:09
https://blog.csdn.net/weixin_39732534/article/details/110187674
有必要吗,一次次把别人的作品搬上 ...

又把另外那个抢楼帖的回复关闭了……
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-9-11 15:01:18 | 显示全部楼层
这样有意思吗?之前就发了个复制百度的代码还说是自己写的页面的帖子,之前看你是第一次给你开个玩笑也就算了,哪知你竟不思悔改依然变本加厉,我没什么好说的了,希望你好自为之
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-9-11 20:10:07 | 显示全部楼层
青出于蓝 发表于 2022-9-11 08:09
https://blog.csdn.net/weixin_39732534/article/details/110187674
有必要吗,一次次把别人的作品搬上 ...

哦,别误会,这里没有分享的选项(就是作品分享),而且我并没有说是我原创的,很抱歉没有在文中表明,实在对不起,下次会注意的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-9-11 20:10:58 | 显示全部楼层
对不起各位,现在就声明一下:本文属于转载,不是原创!!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-9-11 20:11:36 | 显示全部楼层

对不起各位,忘记声明好吧,打脸了啊!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-9-11 20:14:06 | 显示全部楼层
临时号 发表于 2022-9-11 15:01
这样有意思吗?之前就发了个复制百度的代码还说是自己写的页面的帖子,之前看你是第一次给你开个玩笑也就算了 ...

跟你们各位磕个头,道个歉啊,真的不是我故意的啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-9-11 20:14:38 | 显示全部楼层
各位原谅,多多海涵
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-9-11 20:14:42 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-9-11 20:15:51 | 显示全部楼层
但是还请各位不要在我的喜庆日子大骂我一顿啊,真的没注意版权诶,下次一定申明的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-9-11 22:27:56 | 显示全部楼层
现在标上转载了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-9-12 05:19:02 | 显示全部楼层

嗯,现在好了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-23 06:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表