【Python】Matplotlib:立体永生花绘制

本文代码部分实现参考自CSDN博客:https://blog.csdn.net/ak_bingbing/article/details/135852038

一、引言

Matplotlib作为Python生态中最著名的可视化库,其三维绘图功能可以创造出令人惊叹的数学艺术。本文将通过一个独特的参数方程,结合极坐标系转换与动画技术,演示如何用代码"栽培"一朵永恒旋转的立体永生花。该作品展现了数学之美与编程创意的完美结合。

二、实现原理

2.1 参数方程设计

永生花的形态由以下核心方程构建:

  • 时间维度t从-4π到26π渐变,形成螺旋生长轨迹
  • 衰减函数p = (π/2)*exp(-t/(8π))控制花瓣的展开程度
  • 振荡函数change = sin(20t)/50添加自然卷曲效果
  • 形态函数u = 1 - (1 - mod(3.3t, 2π)/π)^4/2 + change生成花瓣的波浪边缘

2.2 坐标变换

通过极坐标转换实现三维曲面:

x = linspace(0, 1, res_x)  # 径向采样
t = linspace(-4π, 26π, res_t)  # 角度采样
r = 1.5*u*(x*sin(p)+y*cos(p))  # 极径计算
h = u*(x*cos(p)-y*sin(p))      # 高度计算
X, Y = r*cos(t), r*sin(t)      # 转换为笛卡尔坐标

三、代码实现

3.1 曲面生成

def generate_surface(res_x=25, res_t=1151):"""生成极坐标曲面数据"""x, t = np.meshgrid(np.linspace(0, 1, res_x),np.linspace(-4 * np.pi, 26 * np.pi, res_t))p = (np.pi / 2) * np.exp(-t / (8 * np.pi))  # 衰减函数change = np.sin(20 * t) / 50                 # 振荡修正项u = 1 - (1 - np.mod(3.3 * t, 2 * np.pi) / np.pi)**4 / 2 + changey = 2 * (x**2 - x)**2 * np.sin(p)            # 纵向偏移r = 1.5 * u * (x * np.sin(p) + y * np.cos(p)) # 极径计算h = u * (x * np.cos(p) - y * np.sin(p))       # 高度计算return r * np.cos(t), r * np.sin(t), h        # 笛卡尔坐标转换

3.2 动画创建

def create_animation(xyz, elev=30, angle_step=2, interval=50):"""创建3D自动旋转动画"""fig = plt.figure(figsize=(8, 8))ax = fig.add_subplot(projection='3d')# 绘制彩色曲面ax.plot_surface(*xyz, cmap='magma', linewidth=0, antialiased=True)# 可视化优化ax.set_axis_off()plt.title('永生花开映挚爱', fontsize=16)# 动画旋转逻辑def _rotate(angle):ax.view_init(elev=elev, azim=angle)# 创建动画对象ani = animation.FuncAnimation(fig, _rotate,frames=np.arange(0, 360, angle_step),interval=interval)plt.show()

四、效果展示

在这里插入图片描述

  1. 色彩映射:使用magma色板实现熔岩渐变效果
  2. 动态效果:通过每50ms旋转2度实现平滑转动
  3. 视觉优化
    • 隐藏坐标轴(set_axis_off())
    • 抗锯齿处理(antialiased=True)
    • 白色背景配置

五、源码展示

import numpy as np
import matplotlib.pyplot as plt
from matplotlib import animation# 配置全局参数
plt.rcParams.update({'font.sans-serif': ['SimHei'],  # 中文字体'axes.facecolor': 'white',      # 坐标背景'savefig.facecolor': 'white'
})def generate_surface(res_x=25, res_t=1151):"""生成极坐标曲面数据"""x, t = np.meshgrid(np.linspace(0, 1, res_x),np.linspace(-4 * np.pi, 26 * np.pi, res_t))p = (np.pi / 2) * np.exp(-t / (8 * np.pi))change = np.sin(20 * t) / 50u = 1 - (1 - np.mod(3.3 * t, 2 * np.pi) / np.pi) ** 4 / 2 + changey = 2 * (x**2 - x)**2 * np.sin(p)r = 1.5 * u * (x * np.sin(p) + y * np.cos(p))h = u * (x * np.cos(p) - y * np.sin(p))return r * np.cos(t), r * np.sin(t), hdef create_animation(xyz, elev=30, angle_step=2, interval=50):"""创建并播放3D自动旋转动画"""fig = plt.figure(figsize=(8, 8))ax = fig.add_subplot(projection='3d')# 绘制曲面ax.plot_surface(*xyz, cmap='magma', linewidth=0, antialiased=True)# 隐藏坐标轴和刻度ax.set_axis_off()plt.title('永生花开映挚爱', fontsize=16)# 旋转函数def _rotate(angle):ax.view_init(elev=elev, azim=angle)ani = animation.FuncAnimation(fig, _rotate,frames=np.arange(0, 360, angle_step),interval=interval)plt.show()if __name__ == '__main__':xyz = generate_surface()create_animation(xyz)

六、总结

本文通过数学参数方程与Matplotlib三维可视化功能的结合,实现了一个富有艺术美感的数字永生花。该案例展示了如何将:

  1. 极坐标系转换
  2. 参数化曲面生成
  3. 三维动画控制
    等关键技术有机结合。读者可通过调整方程参数或更换色板(如viridisplasma),创造出独具个人风格的数字花卉。

完整代码及运行环境要求见原文开头部分。建议在Jupyter Notebook或支持交互绘图的IDE中运行以获得最佳动画效果。

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

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

相关文章

OpenCV 图形API(57)颜色空间转换-----将图像从 RGB 色彩空间转换为 YUV 色彩空间函数RGB2YUV()

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 将图像从 RGB 色彩空间转换为 YUV 色彩空间。 该函数将输入图像从 RGB 色彩空间转换为 YUV。R、G 和 B 通道值的常规范围是 0 到 255。 在进行线…

Kubernetes(K8S)入门阶段详细指南

Kubernetes(K8S)入门阶段详细指南 一、容器技术基础:Docker核心操作与理解 1.1 Docker核心操作 镜像管理: 拉取镜像:docker pull ubuntu(以Ubuntu为例)查看本地镜像:docker images删除镜像:docker rmi <image_id>容器生命周期管理: 启动容器:docker run -d -…

AI大模型学习十一:‌尝鲜ubuntu 25.04 桌面版私有化sealos cloud + devbox+minio,实战运行成功

一、说明 没意思&#xff0c;devbox私有化不支持&#xff0c;看来这个开源意义不大&#xff0c;和宣传差距很大啊&#xff0c;那devbox就不用玩 用了ubuntu 25.04&#xff0c;内核为GNU/Linux 6.14.0-15-generic x86_64&#xff0c;升级了部分image&#xff0c;过程曲折啊 se…

[GXYCTF2019]Ping Ping Ping

解题步骤 1、先使用 内敛执行 查看当前的php文件 执行 命令执行 发现空格被过滤 ?ip127.0.0.1$IFS|$IFSwhomi 还有一个点就是这个 执行的命令是不能进行拼接的 可能就是被过滤了 | 所以我们使用 ; 进行绕过一下 空格过滤代替 $IFS ${IFS} ${IFS}$9 //这里$1到$9都可以 $IFS$1…

重温TCP通信过程

文章目录 1. 慢启动2. 拥塞避免 3. 快速重传和快速恢复 初识tcp报文 我们先来简单认识一下报文的格式,具体理解需要后面详细介绍 源端口和目的端口:顾名思义就是标识传输双方的信息首部长度:指的是TCP报头的长度,换句话来说,我们需要用一个属性来描述报头的长度,就说明TCP的报…

力扣HOT100之链表:23. 合并 K 个升序链表

这道题我是用最淳朴最简单的思路去做的&#xff0c;用一个while循环持续地将当前遍历到的最小值加入到合并链表中&#xff0c;while循环中使用一个for循环遍历整个指针数组&#xff0c;将其中的最小值和对应下标记录下来&#xff0c;并将其值加入到合并链表中&#xff0c;同时对…

Spring Boot 支持政策

&#x1f9d1;&#x1f4bb; Spring Boot 支持政策 ✒️ Andy Wilkinson 于2023年12月7日编辑本页 32次修订 &#x1f4cc; 核心政策 &#x1f6e1;️ VMware Tanzu 开源支持政策 Spring Boot 针对关键错误和安全问题提供支持 &#x1f4c6; 版本支持周期 1️⃣ 主要版本&a…

WeakAuras Lua Script TOC BOSS2 <Lord Jaraxxus>

WeakAuras Lua脚本&#xff08;WA 字符串&#xff09; 十字军试炼老2 加拉克苏斯 血肉成灰 !WA:2!TIv7VnYrz8UXuDudiDN7PqFfCdTHKYLOeN7sBpXvKDIZf36Kyw7KRT3DYE2Dh7DAwV7CZSoXUOIewf4GdAfgbu13LPasv8MS4diavKoH4RSkIp0phXDT8je5FGYZmZU2oVCqrGLJZUpZZoZZB)EEz1wkr9ewjSU6MD5u…

Spring security详细上手教学(二)用户管理

Spring security详细上手教学&#xff08;二&#xff09;用户管理 这章节主要学习&#xff1a; 如何使用UserDetails接口描述用户在鉴权流中使用UserDetailsService自定义的UserDetailsService实现自定义的UserDetailsManager实现在鉴权中使用JdbcUserDetialsManager 在Spri…

网络安全厂商F5荣登2025 CRN AI 100榜单,释放AI潜力

近期&#xff0c;网络安全厂商F5凭借其应用交付和安全技术与前沿的人工智能洞察&#xff0c;成功入选“2025 CRN AI 100 榜单”&#xff0c;并跻身“领导者”之列。这一荣誉的获得&#xff0c;彰显了F5在助力企业拥抱人工智能创新的过程中&#xff0c;无需牺牲性能、灵活性或安…

4.RabbitMQ - 延迟消息

RabbitMQ延迟消息 文章目录 RabbitMQ延迟消息一、延迟消息介绍二、实现2.1 死信交换机2.2 延迟消息插件2.3 取消超时订单 一、延迟消息介绍 延迟消息&#xff1a;生产者发送消息时指定一个时间&#xff0c;消费者不会立刻收到消息&#xff0c;而是在指定时间后才收到消息 用户…

5.学习笔记-SpringMVC(P53-P60)

1.响应 &#xff08;1&#xff09;响应页面 &#xff08;2&#xff09;响应数据&#xff08;异步提交&#xff09;&#xff1a;文本数据、json数据 2.REST风格 (1)REST:表现形式状态转换。 (2)传统风格资源描述形式 3.Restful入门案例 5.基于RESTful页面数据…

Golang | 搜索表达式

// (( A | B | C ) & D ) | E & (( F | G ) & H )import "strings"// 实例化一个搜索表达式 func NewTermQuery(field, keyword string) *TermQuery {return &TermQuery{Keyword: &Keyword{Field: field, Word: keyword},} }func (tq *TermQuery…

LangChain构建大模型应用之RAG

RAG(Retrieval-augmented Generation 检索增强生成)是一种结合信息检索与生成模型的技术,通过动态整合外部知识库提升大模型输出的准确性和时效性。其核心思想是在生成答案前,先检索外部知识库中的相关信息作为上下文依据,从而突破传统生成模型的静态知识边界。 为什么我们…

Ubuntu 下 Nginx 1.28.0 源码编译安装与 systemd 管理全流程指南

一、环境与依赖准备 为确保编译顺利&#xff0c;我们首先更新系统并安装必要的编译工具和库&#xff1a; sudo apt update sudo apt install -y build-essential \libpcre3 libpcre3-dev \zlib1g zlib1g-dev \libssl-dev \wgetbuild-essential&#xff1a;提供 gcc、make 等基…

第十二章-PHP文件上传

第十二章-PHP文件上传 一&#xff0c;文件上传原理 一、HTTP协议与文件上传 1. 请求体结构 当表单设置enctype"multipart/form-data"时&#xff0c;浏览器会将表单数据编码为多部分&#xff08;multipart&#xff09;格式。 Boundary分隔符&#xff1a;随机生成的…

CSS元素动画篇:基于当前位置的变换动画(三)

基于当前位置的变换动画&#xff08;三&#xff09; 前言缩放效果类元素动画脉冲动画效果效果预览代码实现 橡皮筋动画效果效果预览代码实现 果冻动画效果效果预览代码实现 欢呼动画效果效果预览代码实现 心跳动画效果效果预览代码实现 结语 前言 CSS元素动画一般分为两种&…

Redis ssd是什么?Redis 内存空间优化的点都有哪些?embstr 和 row、intset、ziplist分别是什么?

Redis SSD 是什么&#xff1f; Redis SSD 通常指 Redis 使用 SSD&#xff08;固态硬盘&#xff09;作为持久化存储介质的场景。虽然 Redis 是内存数据库&#xff08;数据主要驻留内存&#xff09;&#xff0c;但其持久化机制&#xff08;如 RDB 快照和 AOF 日志&#xff09;需…

【蓝桥杯】 数字诗意

数字诗意 在诗人的眼中&#xff0c;数字是生活的韵律&#xff0c;也是诗意的表达。 小蓝&#xff0c;当代顶级诗人与数学家&#xff0c;被赋予了”数学诗人”的美誉。他擅长将冰冷的数字与抽象的诗意相融合&#xff0c;并用优雅的文字将数学之美展现于纸上。 某日&#xff0…

DHCP 服务器运行流程图

以常见的 DHCP v4 为例,其完整流程如下: 一、客户端请求 IP 地址阶段 DHCPDiscover:客户端启动后,会以广播的形式发送 DHCPDiscover 报文,目的是在网络中寻找可用的 DHCP 服务器。该报文中包含客户端的 MAC 地址等信息,以便服务器能够识别客户端。DHCPOffer:网络中的 D…