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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/9737.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

多目标跟踪入门介绍

多目标跟踪算法 我们也可以称之为 Multi-Target-Tracking (MTT)。 那么多目标跟踪是什么? 不难看出,跟踪算法同时会为每个目标分配一个特定的 id 。 由此得出了目标跟踪与目标检测的区别(似乎都是用方框来框出目标捏…

创新案例|搜索新王Perplexity如何构建生成式AI产品开发的新模式

Perplexity AI:生成式搜索的颠覆者 刚刚成立满两年,Perplexity AI已经变成了我日常频繁使用的工具,甚至取代了我对 Google搜索的依赖 —— 而我并非个案。该公司仅凭不到 50 名员工,已经吸引了数千万用户。他们目前的年收入超过 …

数据赋能(81)——数据要素:管理必要性

数据作为现代社会的核心资源,其潜在价值巨大。有效的数据要素管理能够确保数据得到充分的利用,转化为具备潜在利用价值的数据资产,为使用者或所有者带来经济效益。数据要素管理涉及到数据的收集、存储、处理、分析和利用等各个环节&#xff0…

马尔可夫决策过程(Markov Decision Process,简称MDP)

马尔可夫决策过程是一个四元组(S, A, P, R),其中: S是状态集合,表示智能体(Agent)可能处于的所有状态;A是动作集合,表示智能体可以采取的所有动作;P是状态转…

Linux 操作系统线程1

目录 一、线程 1.1线程的基本概念 1.2 线程相关的API函数 1.2.1 线程的创建 1.2.2 线程退出 1.2.3 线程等待函数 1.2.4 获取线程ID 1.2.5 线程取消 1.2.6 线程的清理函数 一、线程 1.1线程的基本概念 线程是属于进程;一个进程可以有多个线程&#xff…

第五十八节 Java设计模式 - 适配器模式

Java设计模式 - 适配器模式 我们在现实生活中使用适配器很多。例如,我们使用存储卡适配器连接存储卡和计算机,因为计算机仅支持一种类型的存储卡,并且我们的卡与计算机不兼容。 适配器是两个不兼容实体之间的转换器。适配器模式是一种结构模…

一文看懂深度学习中的cuda环境配置:cuda,cuda driver,cudnn与pytorch-cuda

深度学习中通常会涉及到cuda环境相关的问题,特别是torch版本,cuda版本等兼容问题。 主要涉及到这四个方向 显卡驱动:cuda driver 。驱动API (driver API)通过nvidia-smi查看,是所有cuda环境的基础CudaTool…

【二叉树】(一)二叉树基础知识及多种遍历方式

二叉树基础知识及多种遍历方式 关于二叉树,该了解这些二叉树的种类存储方式遍历方式节点定义 二叉树的三种递归遍历(深度遍历)递归遍历设计核心思想递归遍历力扣例题解析 二叉树的三种迭代遍历(深度遍历)前后续遍历中序…

数据库开启远程连接

服务器端添加一个允许远程连接的root用户: mysql -u root -p create user root192.168.10.20 identified by admin; //创建一个192.168.10.20地址远程连接的root用户 grant all privileges on *.* to root192.168.10.20; //赋予远程root用户所有的权…

中国地形可调节高度-UE5-UE4

2000坐标系,可进行高度调整。 支持版本4.21-5.4版本 下载位置:https://mbd.pub/o/bread/ZpWZm5Zs

教你解决PUBG绝地求生启动不了 登录不了 登录不进去的问题

尽管《绝地求生》(PUBG)凭借其紧张刺激的战术对抗与高度仿真的战场环境在全球范围内赢得了众多拥趸,但不少玩家在经历了一场紧张激烈的生命争夺赛后,却面临着一个不愉快的现实:游戏无法顺利启动或登录。这种紧随激烈战…

【docker】常用的把springboot打包为docker镜像的maven插件

Spring Boot Maven Plugin: Spring Boot 自带的 Maven 插件 (spring-boot-maven-plugin) 支持直接生成 Docker 镜像。通过配置,可以在 Maven 构建过程中自动构建 Docker 镜像,而无需单独编写 Dockerfile。这种方法简化了将应用打包为 Docker 镜像的过程。…

工业数据采集软件 高效的数字化信息管理系统

近年来,随着产线自动化程度的提升,越来越多的工业设备被运用到自动化生产中,产线中各位置所产生的数据也越来越多,每个设备又都是独立的,如何将其整合,进行系统化查看处理,就是工业数据采集软件…

05.线程

进程有哪些缺陷? 1.创建的代价较高 进程是OS进行资源分配的基本单位,也就是说创建进程是需要分配资源的,所以创建代价很高 2.通信不方便 进程之间要想进行通信必须借助第三方资源(管道、内存映射、消息队列) 线程的优…

大模型日报2024-05-10

大模型日报 2024-05-10 大模型资讯 阿里巴巴发布新AI语言模型Qwen2.5,超越OpenAI的GPT-4 摘要: 阿里巴巴集团旗下的阿里云推出了新型大型语言模型Qwen2.5。据称,在语言生成能力上超过了OpenAI的GPT-4,尽管在其他领域也有出色表现。该模型的发…

JAVA大量数据导出excel

背景:因项目需要导出3万行,90列的数据到excel,使用传统的apache poi 直接导出,导致504连接超时无法导出。然后改造方法,异步导出。 一、准备一个导出类,属性有id,outputstrream,finleName,err,e…

[debian12] wps for linux打开PDF卡死

原因 wps使用wpspdf处理PDF文件,而wpspdf依赖于libtiff5.so.5。而系统更新后,linux发行版提供的是libtiff.so.6或更新版本,导致其无法正常工作。 解决方案 理论上,安装libtiff5即可: apt install libtiff5.so.5 但实…

VM虚假机联网(无代码,超简单)NAT模式

1、左边顶上编辑里面最下面找到虚拟网络编辑器2.启用管理员特权3.重新创建一个NAT模式的网络(名称随便一个) 4.打开这两个设置里面的东西进行拍照并记住IP区间和网关,等下要用; 5.打开虚拟机,右上角,下标点…

腾讯云服务器部署前后端服务

服务器:OpenCloudOS (兼容centos8) 后端:javaSpringboot 前端:Vue 下载jdk 1)下载jdk11 wget https://download.java.net/openjdk/jdk11/ri/openjdk-1128_linux-x64_bin.tar.gz 2)解压jdk …

论文研读 Disentangled Information Bottleneck

解耦信息瓶颈 摘要: 信息瓶颈方法是一种从源随机变量中提取与预测目标随机变量相关的信息的技术,通常通过优化平衡压缩和预测项的IB拉格朗日乘子f来实现,然而拉格朗日乘子很难优化,需要多次实验来调整拉格朗日乘子的值&#xff0c…