Python图形复刻——绘制母亲节花束

embedded/2024/9/24 17:17:57/

各位小伙伴,好久不见,今天学习用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


http://www.ppmy.cn/embedded/41836.html

相关文章

容联云零代码平台容犀desk:重新定义坐席工作台

在数智化浪潮的推动下,企业亟待灵活适应市场变化、快速响应客户需求,同时还要控制成本并提升效率,传统的软件开发模式因开发周期长、成本高、更新迭代慢等问题,逐渐难以满足企业灵活多变的业务需求。 容犀Desk,观察到…

【Go语言入门学习笔记】Part1.梦开始的地方

一、前言 经过一系列的学习,终于有时间来学习一些新的语言,Go语言在现在还是比较时髦的,多一个技能总比不多的好,故有时间来学一下。 二、配置环境 按照网络中已有的配置方法配置好,本人采用了Jetbrain的Goland&#…

WebRTC 的核心:RTCPeerConnection

WebRTC 的核心:RTCPeerConnection WebRTC 的核心:RTCPeerConnection创建 RTCPeerConnection 对象RTCPeerConnection 与本地音视频数据绑定媒体协商ICE什么是 Candidate?收集 Candidate交换 Candidate尝试连接 SDP 与 Candidate 消息的互换远端…

Linux提权--定时任务--打包配合 SUID(本地)文件权限配置不当(WEB+本地)

免责声明:本文仅做技术交流与学习... 目录 定时任务 打包配合 SUID-本地 原理: 背景: 操作演示: 分析: 实战发现: 定时任务 文件权限配置不当-WEB&本地 操作演示: 定时任务 打包配合 SUID-本地 原理: 提权通过获取计划任务执行文件信息进行提权 . 1、相对路径和…

【Shell脚本】Shell编程之数组

目录 一.数组 1.基本概念 2.定义数组的方法 2.1.方法一 2.2.方法二 2.3.方法三 2.4.方法四 2.5.查看数组长度 2.6.查看数组元素下标 3.数组分片 4.数组字符替换 4.1.临时替换 4.2.永久替换 5.数组删除 5.1.删除某个下标 5.2.删除整组 6.数组遍历和重新定义 7…

高斯分布应用;高斯分布和高斯核有什么;正态分布的具体应用举例说明

目录 高斯分布应用 高斯分布和高斯核有什么 正态分布的具体应用举例说明 高斯分布应用

「AIGC」Python实现tokens算法

本文主要介绍通过python实现tokens统计,避免重复调用openai等官方api,开源节流。 一、设计思路 初始化tokenizer使用tokenizer将文本转换为tokens计算token的数量二、业务场景 2.1 首次加载依赖 2.2 执行业务逻辑 三、核心代码 from transformers import AutoTokenizer imp…

Django model 联合约束和联合索引

联合约束和联合索引 在Django的模型中,我们可以通过联合约束和联合索引来对表的多个字段进行约束和索引。举例来说,比如在购物车表中,我们希望用户和商品两个字段的组合是唯一的,即同一个用户不能重复添加同一种商品到购物车里。 在Django模型中,我们可以这样定义购物车…