【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.pswp.cn/bicheng/78727.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/78727.shtml
英文地址,請注明出處:http://en.pswp.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…