【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()
四、效果展示
- 色彩映射:使用
magma
色板实现熔岩渐变效果 - 动态效果:通过每50ms旋转2度实现平滑转动
- 视觉优化:
- 隐藏坐标轴(
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三维可视化功能的结合,实现了一个富有艺术美感的数字永生花。该案例展示了如何将:
- 极坐标系转换
- 参数化曲面生成
- 三维动画控制
等关键技术有机结合。读者可通过调整方程参数或更换色板(如viridis
、plasma
),创造出独具个人风格的数字花卉。
完整代码及运行环境要求见原文开头部分。建议在Jupyter Notebook或支持交互绘图的IDE中运行以获得最佳动画效果。
相关文章:
【Python】Matplotlib:立体永生花绘制
本文代码部分实现参考自CSDN博客:https://blog.csdn.net/ak_bingbing/article/details/135852038 一、引言 Matplotlib作为Python生态中最著名的可视化库,其三维绘图功能可以创造出令人惊叹的数学艺术。本文将通过一个独特的参数方程,结合极…...
Spark Streaming核心编程总结(四)
一、有状态转化操作:UpdateStateByKey 概念与作用 UpdateStateByKey 用于在流式计算中跨批次维护状态(如累加统计词频)。它允许基于键值对形式的DStream,通过自定义状态更新函数,将历史状态与新数据结合,生…...
虚拟数字人:从虚拟到现实的跨越与未来展望
在人工智能和数字技术飞速发展的今天,虚拟数字人(Digital Humans)正逐渐从科幻走向现实,成为科技领域的新焦点。虚拟数字人不仅在娱乐、教育、客服等领域展现出巨大的应用潜力,还在不断推动着人机交互方式的变革。本文…...
RuoYi-Vue项目Docker镜像构建、推送与部署完整流程
RuoYi-Vue项目Docker镜像构建、推送与部署流程 一、本地构建镜像 1. 使用docker-compose构建镜像 基于docker-compose.yml文件,可以一次构建所有服务镜像: # 构建所有服务 docker-compose build# 或者构建并启动 docker-compose up -d --build若只需…...
MyBatis DTD [Element type “if“ must be declared]
MyBatis DTD [Element type "if" must be declared] <?xml version"1.0" encoding"UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"&g…...
【项目实训个人博客】multi-agent调研(1)
随着LLM的涌现,以LLM为中枢构建的Agent系统在近期受到了广泛的关注。Agent系统旨在利用LLM的归纳推理能力,通过为不同的Agent分配角色与任务信息,并配备相应的工具插件,从而完成复杂的任务。 目前更常见的框架大多聚焦于single-ag…...
OpenSSH配置连接远程服务器MS ODBC驱动与Navicat数据库管理
OpenSSH配置连接远程服务器MS ODBC驱动与Navicat数据库管理 目录 OpenSSH配置连接远程服务器MS ODBC驱动与Navicat数据库管理 一、MS ODBC驱动 1.1、安装到Windows后的表现形式 1.2、版本的互斥性 1.3、安装程序 1.4、配置后才可用 二、Navicat数据库管理工具 2.1、安…...
Day14(链表)——LeetCode234.回文链表141.环形链表
1前言 这几天脑子真转不动,本想刷点简单题养养脑子,结果发现简单题也想不到,只是看答案好理解了。。。 2 LeetCode234.回文链表(LeetCode234) 2.1 题目描述 即判断链表是否为回文链表,回文链表即链表的数值正向遍历与反向遍历结…...
Centos 7.6安装redis-6.2.6
1. 安装依赖 确保系统已经安装了必要的编译工具和库: sudo yum groupinstall "Development Tools" -y sudo yum install gcc make tcl -y 2. 解压 Redis 源码包 进入 /usr/local/ 目录并解压 redis-6.2.6.tar.gz 文件: cd /usr/local/ sudo ta…...
react的 Fiber 节点的链表存储
在React Fiber架构中,Fiber节点的链表存储是一种重要的数据结构组织方式,用于管理和遍历Fiber节点。以下是关于Fiber节点链表存储的详细介绍: 链表结构 单链表:React Fiber节点通过next指针形成单链表结构。每个Fiber节点都有一…...
MCU ADC参考电压变化怎么办?
在嵌入式系统设计中,ADC(模数转换器)精度直接决定了系统对模拟信号的感知能力。 然而,很多工程师对ADC参考电压(VREF)的认识仍然存在模糊,尤其是在电池供电、电压不稳场景下。 ADC参考电压定义…...
IP地址与子网计算工具
IP地址与子网计算工具 工具介绍 这是一个免费的在线IP地址与子网计算工具,专为网络工程师和IT维护人员设计。只需输入IPv4地址和子网掩码位数,即可快速计算出: 工具已发布在: http://mutou888.com/tools/net/ip/index.html 网络地址广播地…...
显卡驱动与cuda toolkit版本对应关系
查显卡对应驱动的网址: NVIDIA GeForce 驱动程序 - N 卡驱动 | NVIDIA 查这个的时候,不同的显卡对应不同的产品类型和系列,需要先选对这两个,才能找到对应的产品名称,比如A6000,是在RTX/Quadro类型…...
典籍查询界面增加我的收藏查询功能
1.效果展示 点击我的收藏后可以显示当前用户收藏的典籍 2.后端代码 3.前端代码...
浮点数:IEEE 754标准
IEEE 754 标准是一种由电气和电子工程师协会(IEEE)制定的浮点数表示的标准,广泛应用于计算机系统中,下面是详细介绍: 历史背景 在 IEEE 754 标准出现之前,不同的计算机系统采用各自的浮点数表示方法&…...
RISC-V架构的低功耗MCU多电压域优化设计
RISC-V核低功耗MCU的多电压域设计是一种优化电源管理以降低功耗的技术方案。该设计通过电源域划分、电压转换和时序管理等手段,有效降低了系统功耗并提升能效,适用于物联网和嵌入式系统等场景。 多电压域设计的基本原理是将芯片划分为多个独立供电区域&…...
【密码学——基础理论与应用】李子臣编著 第八章 SM2公钥密码算法 课后习题
免责声明 这里都是自己搓或者手写的。 里面不少题目感觉有问题或者我的理解有偏颇,请大佬批评指正! 不带思考抄作业的请自动退出,我的并非全对,仅仅提供思维! 题目 逐题解析 知识前提:模运算的分数怎么转…...
在winform中使用chromiumWebBrowser显示Echarts图表
首先,在项目引用中添加CefSharp,这个是谷歌的控件。 然后在form中添加一个chromiumWebBrower控件 在form初始化时,执行浏览器组件的初始化 //浏览器组件只初始化一次,所以放在主界面 CefSettings settings new CefSettings(); …...
基于ART光学跟踪系统打造具有开创性的人车互动VR解决方案
随着汽车行业的日益发展更多的车内内容量和更高的客户体验使得车辆越来越复杂复杂,。此外消费者的可持续意识与政府的限制,也迫使企业在整个生产过程中提高资源利用率。与此同时为保证利润,开发时间进一步缩短,预算也随之减少。 由…...
面试记录1-春招补录0427
快手面试记录: 面试官是个帅哥,嘿嘿,而且感觉很厉害的样子,说话也比较温柔。 最近同时面试了好几家公司,感觉面试官的水平差距还是比较明显的。快手这位面试官给我的印象很不错哇! 一听他说话就知道他很厉害…...
【计算机网络性能优化】从基础理论到实战调优
目录 前言技术背景与价值当前技术痛点解决方案概述目标读者说明 一、技术原理剖析核心概念图解核心作用讲解关键技术模块说明技术选型对比 二、实战演示环境配置要求核心代码实现案例1:iPerf3带宽测试案例2:TCP窗口优化案例3:QoS流量整形 运行…...
Maven下载aspose依赖失败的解决方法
Maven下载aspose依赖失败的解决方法 日期:2025年4月27日 遇到问题: Could not find artifact com.aspose:aspose-cad:pom:23.9 in aliyunmaven (https://maven.aliyun.com/repository/public) [WARNING] The POM for com.aspose:aspose-cad:jar:23.9 is…...
Redis的阻塞
Redis的阻塞 Redis的阻塞问题主要分为内在原因和外在原因两大类,以下从这两个维度展开分析: 一、内在原因 1. 不合理使用API或数据结构 Redis 慢查询 Redis 慢查询的界定 定义:Redis 慢查询指命令执行时间超过预设阈值(默认 10m…...
OkHttp源码梳理
目录 一、基本使用 1 创建 OkHttpClient 2 构建请求 Request 3 创建和执行 Call 二、OkHttp请求整体流程 1. 用户调用入口 2. RealCall执行逻辑 2.1 同步请求:RealCall.execute() 2.2 异步请求:RealCall.enqueue(Callback) 3. Dispatcher调度请…...
【第三十三周】BLIP论文阅读笔记
BLIP 摘要Abstract文章信息引言方法MED预训练CapFilt 关键代码实验结果总结 摘要 本博客介绍了BLIP(Bootstrapping Language-Image Pre-training),这是一种创新的视觉-语言预训练框架,旨在通过统一模型架构和高效数据增强策略&am…...
如何配置osg编译使支持png图标加载显示
步骤如下: 1.下载osg代码 git clone https://github.com/openscenegraph/OpenSceneGraph.git cd OpenSceneGraph 2.开始配置编译 mkdir build cd build cmake … -DBUILD_OSG_PLUGINS_BY_DEFAULT1 -DBUILD_OSG_PLUGIN_PNG1 3.编译与安装 make make install 4.在安装…...
234. 回文链表(java)
个人理解: 1.先找到链表的中间节点,将链表分为前后两部分 方法:设置快慢指针,初始都指向头节点,慢指针每次走一步,快指针每次走两步。循环结束条件为:快指针后两个元素不为空,此时慢…...
面试:结构体默认是对齐的嘛?如何禁止对齐?
是的。 结构体默认是对齐的。结构体对齐是为了优化内存访问速度和减少CPU访问内存时的延迟。结构体对齐的规则如下: 某数据类型的变量存放的地址需要按有效对齐字节剩下的字节数可以被该数据类型所占字节数整除,char可以放在任意位置,int存…...
Leetcode837.新21点
目录 题目算法标签: 数学, 概率, 动态规划思路代码 题目 837. 新 21 点 算法标签: 数学, 概率, 动态规划 思路 定义状态表示为 f [ i ] f[i] f[i], 表示分数达到 i i i的时候的概率, 分析状态计算, 假设当前的分数是 i i i, 抽取到的牌得分数是 x x x, 那么当前状态就会转移…...
【C到Java的深度跃迁:从指针到对象,从过程到生态】第四模块·Java特性专精 —— 第十五章 泛型:类型系统的元编程革命
一、从C的void*到Java类型安全 1.1 C泛型的原始实现 C语言通过void*和宏模拟泛型,存在严重安全隐患: 典型泛型栈实现: #define DECLARE_STACK(type) \ struct stack_##type { \ type* data; \ int top; \ int capacity; \ }; #de…...
纯净无噪,智见未来——MAGI-1本地部署教程,自回归重塑数据本质
一、MAGI-1简介 MAGI-1 是一种逐块生成视频的自回归去噪模型,而非一次性生成完整视频。每个视频块(含 24 帧)通过整体去噪处理,当前块达到特定去噪阈值后,立即启动下一块的生成。这种流水线设计支持 最多 4 个块的并发…...
BG开发者日志0427:故事的起点
1、4月26日晚上,BG项目的gameplay部分开发完毕,后续是细节以及试玩版优化。 开发重心转移到story部分,目前刚开始, 确切地说以前是长期搁置状态,因为过去的四个月中gameplay部分优先开发。 --- 2、BG这个项目的起点…...
直播预告|TinyVue 组件库高级用法:定制你的企业级UI体系
TinyVue 是一个跨端跨框架的企业级 UI 组件库,基于 renderless 无渲染组件设计架构,实现了一套代码同时支持 Vue2 和 Vue3,支持 PC 和移动端,包含 100 多个功能丰富的精美组件,可帮助开发者高效开发 Web 应用。 4 月 …...
基于Jamba模型的天气预测实战
深入探索Mamba模型架构与应用 - 商品搜索 - 京东 DeepSeek大模型高性能核心技术与多模态融合开发 - 商品搜索 - 京东 由于大气运动极为复杂,影响天气的因素较多,而人们认识大气本身运动的能力极为有限,因此以前天气预报水平较低 。预报员在预…...
Customizing Materials Management with SAP ERP Operations
Customizing Materials Management with SAP ERP Operations...
使用 NServiceBus 在 .NET 中构建分布式系统
在 .NET 中,NServiceBus 依然是构建可靠、可扩展、异步消息驱动架构的强大工具。本文将为你讲解如何在 .NET 环境下集成 NServiceBus,帮助你理解其核心概念及配置方法,并快速上手构建基于消息的系统。 一、NServiceBus 简介 NServiceBus …...
【Linux网络与网络编程】13.五种 IO 模型
前言 在前面的学习中,有一个问题一直没有展开来说,即 IO 问题。 IO 到底有多少种方式呢?什么是高效的 IO 呢? IO 本质上就是 INPUT 和 OUTPUT 。在网络中 INPUT 就是从网卡中获取数据,而 OUTPUT 就是向网卡中发送数据…...
Java后端开发day37--源码解析:TreeMap可变参数--集合工具类:Collections
(以下内容全部来自上述课程) 1. TreeMap 1.1 须知 1.1.1 Entry 节点初始为黑色:提高代码阅读性 1.1.2 TreeMap中的成员变量 comparator:比较规则root:红黑树根节点的地址值size:集合的长度和红黑树…...
海关 瑞数 后缀分析 rs
声明 本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关! 逆向过程 部分python代码 cp execj…...
【合新通信】---Mini单路光模块(Mini SFF/USOT)
产品特性 l 高可靠、全金属外壳、抗振动设计 l 紧凑的结构设计, 超小模块尺寸 l 可插拔标准LC单模光纤连接器接口,方便动态和灵活的配置数据连接 l 每通道工作速率可达1.25Gbps,速率可向下兼容 l 单路发射光纤通道,内置1310nm波长光发射…...
Java详解LeetCode 热题 100(02):LeetCode 49. 字母异位词分组(Group Anagrams)详解
文章目录 1. 题目描述2. 理解题目3. 解法一:排序法3.1 思路3.2 Java代码实现3.3 代码详解3.4 复杂度分析3.5 适用场景4. 解法二:计数法4.1 思路4.2 Java代码实现4.3 代码详解4.4 复杂度分析4.5 适用场景5. 解法三:字符串哈希法5.1 思路5.2 Java代码实现5.3 代码详解5.4 复杂…...
【每日随笔】文化属性 ① ( 天机 | 强势文化与弱势文化 | 文化属性的形成与改变 | 强势文化 具备的特点 )
文章目录 一、文化属性1、天机2、文化属性的强势文化与弱势文化强势文化弱势文化 二、文化属性的形成与改变1、文化属性形成2、文化属性改变3、文化知识的阶层 三、强势文化 具备的 特点 一、文化属性 1、天机 如果想要 了解这个世界的 底层架构 , 就需要掌握 洞察事物本质 的能…...
Java + Seleium4.X + TestNG自动化技术
系列文章目录 文章目录 系列文章目录前言一、 Java版Selenium自动化测试框架介绍和原理1.1 什么是Seleium1.2 特点1.3 注意点 二、安装SeleiumChrome环境 创建Maven项目2.1 安装Seleium Chrome环境2.2 Maven环境 三、Selenium4.X UI元素定位实战3.1 ID选择器3.2 Name选择器3.…...
Spark SQL核心概念与编程实战:从DataFrame到DataSet的结构化数据处理
一、Spark-SQL是什么 Spark SQL 是 Spark 用于结构化数据(structured data)处理的 Spark 模块。 二、Hive and SparkSQL SparkSQL 的前身是 Shark,Shark是给熟悉 RDBMS 但又不理解 MapReduce 的技术人员提供的快速上手的工具。 Hive 是早期唯一运行在 Hadoop 上的 S…...
electron-vite 应用打包自定义图标不显示问题
// 修改electron-builder.yml ... win:executableName: xxx //可执行文件名称icon: build/icon.ico //你的图标路径 ...打包后,自定义图标不显示原因: 1 cannot execute causeexit status 2,安装包无法生成 用管理员身份运行,win11右击开始…...
AI中Token的理解与使用总结
AI中Token的理解与使用总结 什么是Token 在AI领域,特别是自然语言处理(NLP)中,Token是指将文本分割成的最小处理单元。Tokenization(分词)是将原始文本分解为Token的过程。 Token的几种形式 单词级Token:以单词为基本单位 示例:“Hello world” → [“Hello”, “world”…...
C++/SDL 进阶游戏开发 —— 双人塔防(代号:村庄保卫战 14)
🎁个人主页:工藤新一 🔍系列专栏:C面向对象(类和对象篇) 🌟心中的天空之城,终会照亮我前方的路 🎉欢迎大家点赞👍评论📝收藏⭐文章 文章目录 二…...
全栈量子跃迁:当Shor算法破解RSA时,我们如何用晶格密码重构数字世界的信任基岩?
一、量子威胁的降维打击 1. Shor算法的毁灭性力量 # Shor算法量子电路简化示例(Qiskit实现) from qiskit import QuantumCircuit from qiskit.circuit.library import QFTdef shor_circuit(n: int, a: int) -> QuantumCircuit:qc QuantumCircuit(2…...
python实战项目65:drissionpage采集boss直聘数据
python实战项目65:drissionpage采集boss直聘数据 一、需求简介二、流程分析三、完整代码一、需求简介 boss直聘网站近期改版,改版之后代码需要做相应的升级维护。drissionpage采集网页数据是一种不错的方式,笔者认为比Selenium好用,使用方法大家可以自行查阅资料。boss直聘…...
常用的性能提升手段--提纲
上一篇文章里,介绍了提升性能的一种优化手段:池化。 这篇文章来归纳整理一下其他的常见的提升性能的手段 1. 缓存 (Caching) 缓存可以说是计算机领域的万金油了,它无处不在。 举个最简单的例子,CPU -> L1,L2,L3 Cache -> 内存 。 CPU的处理速度要比内存快几个数量…...