Python图形复刻——绘制母亲节花束
各位小伙伴,好久不见,今天学习用Python绘制花束。
有一种爱,不求回报,有一种情,无私奉献,这就是母爱。祝天下妈妈节日快乐,幸福永远!
图形展示:

代码展示:
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.colors import LinearSegmentedColormap as lsc
from scipy.spatial.transform import Rotation as R
# @author : slandarer# 生成花朵数据
t1 = np.array(range(25))/24
t2 = np.arange(0, 575.5, 0.5)/575*20*np.pi + 4*np.pi
[xr, tr] = np.meshgrid(t1, t2)
pr = (np.pi/2)*np.exp(-tr/(8*np.pi))
ur = 1 - (1 - np.mod(3.6*tr, 2*np.pi)/np.pi)**4/2 + np.sin(15*tr)/150 + np.sin(15*tr)/150
yr = 2*(xr**2 - xr)**2*np.sin(pr)
rr = ur*(xr*np.sin(pr) + yr*np.cos(pr))
hr = ur*(xr*np.cos(pr) - yr*np.sin(pr))tb = np.resize(np.linspace(0, 2, 151), (1,151))
rb = np.resize(np.linspace(0, 1, 101), (101,1)) @ ((abs((1-np.mod(tb*5,2))))/2 + .3)/2.5
xb = rb*np.cos(tb*np.pi)
yb = rb*np.sin(tb*np.pi)
hb = np.power(-np.cos(rb*1.2*np.pi)+1, .2)cL = np.array([[.33,.33,.69], [.68,.42,.63], [.78,.42,.57], [.96,.73,.44]])
cL = np.array([[.02,.04,.39], [.02,.06,.69], [.01,.26,.99], [.17,.69,1]])
cMpr = lsc.from_list('slandarer', cL)
cMpb = lsc.from_list('slandarer', cL*.4 + .6)# 绕轴旋转数据点
def rT(X, Y, Z, T):SZ = X.shapeXYZ = np.hstack((X.reshape(-1, 1), Y.reshape(-1, 1), Z.reshape(-1, 1)))RMat = R.from_euler('xyz', T, degrees = True); XYZ = RMat.apply(XYZ)return XYZ[:,0].reshape(SZ), XYZ[:,1].reshape(SZ), XYZ[:,2].reshape(SZ)# 贝塞尔函数插值生成花杆并绘制
def dS(X, Y, Z):MN = np.where(Z == np.min(Z)); M = MN[0][0]; N = MN[1][0]x1 = X[M, N]; y1 = Y[M, N]; z1 = Z[M, N] + .03x = np.array([x1, 0, (x1*np.cos(np.pi/3) - y1*np.sin(np.pi/3))/3]).reshape((3,1))y = np.array([y1, 0, (y1*np.cos(np.pi/3) + x1*np.sin(np.pi/3))/3]).reshape((3,1))z = np.array([z1, -.7, -1.5]).reshape((3,1))P = np.hstack((x,y,z)).Tt = (np.array(range(50)) + 1)/50c1 = np.array([1, 2, 1]).reshape(3,1)c2 = np.power(t, np.array(range(3)).reshape(3,1))c3 = np.power(1 - t, np.array(range(2, -1, -1)).reshape(3,1))P = (P @ (c1*c2*c3))ax.plot(P[0], P[1], P[2], color = '#800080')# 创建figure窗口及axis坐标区域
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
# 绘制花束
ax.plot_surface(rr*np.cos(tr), rr*np.sin(tr), hr + .35, rstride = 1, cstride = 1,facecolors = cMpr(hr), antialiased = True, shade = False)
U, V, W = rT(rr*np.cos(tr), rr*np.sin(tr), hr + .35, [180/8, 0, 0]); V = V - .4
for i in range(5):U, V, W = rT(U, V, W, [0, 0, 72])ax.plot_surface(U, V, W - .1, rstride = 1, cstride = 1,facecolors = cMpr(hr), antialiased = True, shade = False)dS(U, V, W - .1)u1, v1, w1=rT(xb, yb, hb/2.5 + .32, [180/9, 0, 0])
v1 = v1 - 1.35
u2, v2, w2 = rT(u1, v1, w1, [0, 0, 36])
u3, v3, w3 = rT(u1, v1, w1, [0, 0, 24])
u4, v4, w4 = rT(u3, v3, w3, [0, 0, 24])
for i in range(5):u1, v1, w1 = rT(u1, v1, w1, [0, 0, 72])u2, v2, w2 = rT(u2, v2, w2, [0, 0, 72])u3, v3, w3 = rT(u3, v3, w3, [0, 0, 72])u4, v4, w4 = rT(u4, v4, w4, [0, 0, 72])ax.plot_surface(u1, v1, w1, rstride = 1, cstride = 1,facecolors = cMpb(hb), antialiased = True, shade = False)ax.plot_surface(u2, v2, w2, rstride = 1, cstride = 1,facecolors = cMpb(hb), antialiased = True, shade = False)ax.plot_surface(u3, v3, w3, rstride = 1, cstride = 1,facecolors = cMpb(hb), antialiased = True, shade = False)ax.plot_surface(u4, v4, w4, rstride = 1, cstride = 1,facecolors = cMpb(hb), antialiased = True, shade = False)dS(u1, v1, w1)dS(u2, v2, w2)dS(u3, v3, w3)dS(u4, v4, w4)ax.set_position((-.215, -.3, 1.43, 1.43))
ax.set_box_aspect((1, 1, .8))
ax.view_init(elev = 50, azim = 2)
ax.axis('off')
plt.show()
参考文献:
作者slandarer
网址:https://mp.weixin.qq.com/s/a3QukoBQhoK46aY8ZinBrQ
相关文章:
Python图形复刻——绘制母亲节花束
各位小伙伴,好久不见,今天学习用Python绘制花束。 有一种爱,不求回报,有一种情,无私奉献,这就是母爱。祝天下妈妈节日快乐,幸福永远! 图形展示: 代码展示: …...
【算法优选】 动态规划之子数组、子串系列——壹
文章目录 🎋前言🎋最大子数组和🚩题目描述🚩算法思路🚩代码实现 🌴环形子数组的最大和🚩题目描述🚩算法思路:🚩代码实现 🌲乘积最大子数组&#x…...
PXE+Kickstart无人值守安装安装Centos7.9
文章目录 一、什么是PXE1、简介2、工作模式3、工作流程 二、什么是Kickstart1、简介2、触发方式 三、无人值守安装系统工作流程四、实验部署1、环境准备2、服务端:关闭防火墙和selinux3、添加一张仅主机的网卡4、配置仅主机的网卡4.1、修改网络连接名4.2、配IP地址4…...
C语言实现通讯录,包括增删改查以及动态开辟内存,写入文件等功能
文章目录 前言一、注意二、源码1. test.c源文件2. contact.h头文件3. contact.c源文件 总结 前言 C语言实现通讯录,包括增删改查以及动态开辟内存,写入文件等功能 一、注意 在通讯录菜单栏使用枚举定义PeoInfo类型时,每个结构体类型的成员…...
flowable多对并发网关跳转的分析
更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码: https://gitee.com/nbacheng/ruoyi-nbcio 演示地址:RuoYi-Nbcio后台管理系统 http://218.75.87.38:9666/ 更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码: h…...
【嵌入式——QT】QT集成Ymodem协议使用UDP进行传输
【嵌入式——QT】QT集成Ymodem协议使用UDP进行传输 Ymodem协议帧的数据格式帧头包号校验 通讯过程握手信号起始帧数据帧结束帧代码块 Ymodem命令 QT实现YmodemFileTransmit.hYmodemFileTransmit.cppBootLoader.hBootLoader.cppYmodem协议源码 Ymodem协议 帧的数据格式 帧头、…...
python笔记(17)输入输出
一、标准输入与输出简介 Python通过内置的sys模块管理标准输入(stdin)、标准输出(stdout)和标准错误(stderr)。但对大多数简单应用而言,直接使用内置函数就足够了。 二、输入:inpu…...
408数据结构总结复习笔记一:线性表
408数据结构总结复习笔记一:线性表 从现在开始慢慢更新我的考研复习笔记系列吧~ PS:主要是我自己个人复习过程中觉得重点的点,大家仅供参考哈~ 上岸!!!大家一起加油! 顺序表和链表的比较 顺序表链表存取…...
Docker——目录迁移
我们在生产环境中安装Docker时,默认的安装目录是/var/lib/docker,而通常情况下,规划给系统盘的目录一般为50G,该目录是比较小的,一旦容器过多或容器日志过多,就可能出现Docker无法运行的情况,所…...
SpringAMQP-消息转换器
这边发送消息接收消息默认是jdk的序列化方式,发送到服务器是以字节码的形式,我们看不懂也很占内存,所以我们要手动设置一下 我这边设置成json的序列化方式,注意发送方和接收方的序列化方式要保持一致 不然回报错。 引入依赖&#…...
轻松拿下指针(5)
文章目录 一、回调函数是什么二、qsort使用举例三、qsort函数的模拟实现 一、回调函数是什么 回调函数就是⼀个通过函数指针调⽤的函数。 如果你把函数的指针(地址)作为参数传递给另⼀个函数,当这个指针被⽤来调⽤其所指向的函数 时&#x…...
Nginx反向代理配置
一、介绍 Nginx 的反向代理功能在现代网络架构中扮演着至关重要的角色。首先,它充当了客户端与后端服务器之间的中介。当客户端发送请求时,这些请求先到达 Nginx 服务器,Nginx 会根据预先设定的规则和配置,将请求准确地转发到相应…...
突破编程界限:探索AI编程新境界
文章目录 一、AI编程助手1.1 Baidu Comate智能代码助手1.2 阿里云 通义灵码 二、场景需求三、体验步骤3.1 官网下载3.2 手动下载 四、试用感受4.1 提示4.2 注释生成代码4.3 代码生成4.4 选中生成注释4.5 查看变更&新建文件4.6 调优建议4.7 插件使用 五、结尾推荐 一、AI编程…...
C语言(指针)2
Hi~!这里是奋斗的小羊,很荣幸各位能阅读我的文章,诚请评论指点,关注收藏,欢迎欢迎~~ 💥个人主页:小羊在奋斗 💥所属专栏:C语言 本系列文章为个人学习笔记&#x…...
go学习笔记
1基础搭建 1.1,安装vscode https://code.visualstudio.com/download 64位 1.2,Windows 下搭建Go 开发环境-安装和配置 SDK SDK 的全称(Software Development Kit 软件开发工具包) Go 语言的官网为:golang.org , 因为各种原因,可…...
MacApp自动化测试之Automator初体验
今天我们继续讲Automator的使用。 初体验 启动Automator程序,选择【工作流程】类型。从资源库区域依次将获取指定的URL、从网页中获得文本、新建文本文件三个操作拖进工作流创建区域。 然后修改内容,将获取指定的URL操作中的URL替换成https://www.cnb…...
Vue学习v-html
Vue学习v-html 一、前言1、基本用法2、注意事项 二、总结 一、前言 学习 Vue.js 中的 v-html 指令意味着你想要在你的应用程序中动态地渲染 HTML。这个指令允许你将数据中包含的 HTML 代码直接插入到你的模板中,而不是将其作为纯文本处理。虽然这个功能非常强大&am…...
C++并发:锁
一、前言 C中的锁和同步原语的多样化选择使得程序员可以根据具体的线程和数据保护需求来选择最合适的工具。这些工具的正确使用可以大大提高程序的稳定性和性能,本文讨论了部分锁。 二、std::lock 在C中,std::lock 是一个用于一次性锁定两个或多个互斥…...
Git | git log 和 git status 的区别
如是我闻: git log和git status是Git中的两个非常有用的命令,它们用于不同的目的,并提供不同类型的信息。 git log git log命令用于显示一个或多个分支的提交历史记录。这个命令会列出提交历史,包括每次提交的SHA-1哈希值、提交…...
Django 4.x 智能分页get_elided_page_range
Django智能分页 分页效果 第1页的效果 第10页的效果 带输入框的效果 主要函数 # 参数解释 # number: 当前页码,默认:1 # on_each_side:当前页码前后显示几页,默认:3 # on_ends:首尾固定显示几页&#…...
Spotify推AI应用Studio,结合多信息源生成简报、播客和歌单!能“代你行动”
Spotify Studio:AI驱动的内容生成新利器Spotify Labs推出的全新独立AI应用程序Studio,可根据聊天机器人提示,在用户电脑上生成每日简报、播客和歌单。其生成内容会参考用户在Spotify上的收听历史,以及连接到该应用的其他应用信息&…...
量子加速,多模态跃迁:国产大模型的下一站机遇
量子加速,多模态跃迁:国产大模型的下一站机遇 引言 当国产多模态大模型在理解图文、生成内容上不断突破时,一个更具颠覆性的技术变量正在悄然融入——量子计算。这不仅是实验室里的前沿概念,更是百度、华为、阿里等科技巨头竞相布…...
Image2.0生成的PPT图片转换成可编辑的PPT的一种方法
老弟,PPT不想做,用AI生成的PPT图片编辑不了很烦恼是吧,俺有一法!~ Edit Banana(最强,开源免费) 能把 AI 图→可编辑 PPTX / DrawIO / SVG 原理:用 SAM 分割图标 / 形状,用…...
CANN ONNX 模型生态兼容实战:从模型导入、算子映射到常见报错排查的全流程指南
一、ONNX 与 CANN 的关系 1.1 模型流转路径 PyTorch/TensorFlow↓ (export)ONNX 模型↓ (ATC 转换)CANN .om 模型↓ (ACL 推理)昇腾 NPU 执行ONNX 是中间格式,ATC 是桥梁1.2 为什么需要了解兼容性 常见痛点:1. PyTorch 新算子 ONNX 不支持2. ONNX 支持但 ATC 不支…...
taotoken如何为github actions工作流提供稳定的大模型服务
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 taotoken如何为github actions工作流提供稳定的大模型服务 应用场景类,探讨在github actions自动化流水线中集成taotok…...
AP‑0316 语音模组实测:降噪 + 回声消除 + 全接口,一次搞定通话对讲所有痛点
做音频通话、门禁对讲、车载会议、IPC 拾音的工程师,大概率都被这几个问题折磨过:风扇、空调、风噪、敲击声压不住,通话糊成一团喇叭音量一大就啸叫、回声炸麦,全双工根本跑不起来主板音频电路复杂,ADC/DAC/ 功放还要自…...
创业公司如何利用 Taotoken 统一管理多个 AI 模型服务
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 创业公司如何利用 Taotoken 统一管理多个 AI 模型服务 对于资源有限的创业团队而言,快速验证产品想法、迭代功能是生存…...
MySQL高频面试题-02
这一篇的主题:日志双写机制、深分页瓶颈,以及死锁怎么查。上次和大家聊了 B 树和 MVCC,今天这篇我们直接上硬菜。在社招或者大厂面试中,面试官往往不满足于只问你“什么是索引”,他们更喜欢切入高并发、大数量、分布式的真实场景。…...
什么是电子铅封管理系统APP 有那些功能
电子铅封管理系统APP,简单来说,就是用手机App来管理和操作电子铅封的移动端软件。一、传统铅封 vs 电子铅封对比项传统铅封(塑料封/钢丝封)电子铅封防伪性易仿制,肉眼难辨真假全球唯一芯片ID,无法复制追溯能…...
端侧AI与嵌入式系统融合:从模型轻量化到5G通信的产业化落地
1. 从展会看趋势:端侧AI与嵌入式系统的深度融合最近在德国纽伦堡举办的国际嵌入式展览会,可以说是全球嵌入式技术发展的风向标。作为从业者,我每年都会关注这个展会,因为它总能揭示未来几年工业和技术应用的核心走向。今年&#x…...
