基于Python繪制一個(gè)會(huì)動(dòng)的3D立體粽子
粽子曲面
之前通過matplotlib繪制了圓錐曲面,但matplotlib繪制曲面圖有幾個(gè)問題,其中plot_surface需要有規(guī)范的xOy坐標(biāo),然后根據(jù)其坐標(biāo)繪制z軸參數(shù);plot_trisurf則必須有明確的三角面的頂點(diǎn)。這些限制提高了繪制三維曲面的技術(shù)要求,所以接下來用open3d來以點(diǎn)云的形式來繪制一些更復(fù)雜的曲面。
首先就是下面這個(gè)參數(shù)方程對(duì)應(yīng)的曲面

下面是繪圖代碼
import numpy as np
import open3d as o3d
def getSin(N):
u = np.linspace(0, np.pi*2, N)
v = np.linspace(0, np.pi*2, N)
u,v = np.meshgrid(u,v)
x = np.cos(u).reshape(-1)
y = np.cos(v).reshape(-1)
z = np.cos(u+v).reshape(-1)
return np.array([x,y,z]).T
pcd = o3d.geometry.PointCloud()
pcd.points = o3d.utility.Vector3dVector(getSin(500))
o3d.visualization.draw_geometries([pcd])
最后效果如下,非常像一個(gè)粽子

真·粽子曲面
上面的粽子圖,其實(shí)是散點(diǎn)圖,只不過點(diǎn)數(shù)太多,看上去就比較連續(xù),接下來通過open3d,將這個(gè)粽子的散點(diǎn)圖,轉(zhuǎn)換為粽子曲面。由于曲面生成的本質(zhì)是繪制三角面,而隨著點(diǎn)數(shù)的增多,所需繪制時(shí)間也就越長(zhǎng),故而少選一些點(diǎn)
tri = o3d.geometry.TriangleMesh pcd = o3d.geometry.PointCloud() pcd.points = o3d.utility.Vector3dVector(getSin(20)) mesh = tri.create_from_point_cloud_alpha_shape(pcd, 2) mesh.compute_vertex_normals() o3d.visualization.draw_geometries([mesh], mesh_show_back_face=True)
其中,o3d.geometry.TriangleMesh是一個(gè)類,之所以將其重新賦值,皆因后面調(diào)用的生成曲面的方法名字太長(zhǎng),這樣可以縮減一下一行的長(zhǎng)度。
compute_vertex_normals用于生成法線,如果沒有這個(gè),最后得到的曲面是看不出三維效果的。
最終得到的效果如下,像是個(gè)金屬質(zhì)感的粽子,還挺好看的

點(diǎn)擊Ctrl+數(shù)字,可以更改曲面的配色,為了表現(xiàn)得更加細(xì)膩,下面用100×100的網(wǎng)格來生成粽子曲面,效果如下

正弦曲面
粽子曲面又叫余弦曲面,如果把cos換成sin,那么就得到了正弦曲面

其繪圖代碼如下
import numpy as np
import open3d as o3d
def getCos(N):
u = np.linspace(0, np.pi*2, N)
v = np.linspace(0, np.pi*2, N)
u,v = np.meshgrid(u,v)
x = np.sin(u).reshape(-1)
y = np.sin(v).reshape(-1)
z = np.sin(u+v).reshape(-1)
return np.array([x,y,z]).T
pcd = o3d.geometry.PointCloud()
pcd.points = o3d.utility.Vector3dVector(getCos(500))
pcd.estimate_normals()
o3d.visualization.draw_geometries([pcd])
其中,estimate_normals用于估計(jì)點(diǎn)的法線,這樣在繪圖的時(shí)候會(huì)產(chǎn)生漂亮的光效,最終繪圖結(jié)果如下,可見正弦曲面和余弦曲面的確有著類似互補(bǔ)的性質(zhì)。

到此這篇關(guān)于基于Python繪制一個(gè)會(huì)動(dòng)的3D立體粽子的文章就介紹到這了,更多相關(guān)Python粽子內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
tensorflow實(shí)現(xiàn)殘差網(wǎng)絡(luò)方式(mnist數(shù)據(jù)集)
這篇文章主要介紹了tensorflow實(shí)現(xiàn)殘差網(wǎng)絡(luò)方式(mnist數(shù)據(jù)集),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-05-05
用Python實(shí)現(xiàn)服務(wù)器中只重載被修改的進(jìn)程的方法
這篇文章主要介紹了用Python實(shí)現(xiàn)服務(wù)器中只重載被修改的進(jìn)程的方法,包括用watchdog來檢測(cè)文件的變化等,實(shí)現(xiàn)起來充分體現(xiàn)了Python作為動(dòng)態(tài)語言的靈活性,強(qiáng)烈推薦!需要的朋友可以參考下2015-04-04
Python實(shí)現(xiàn)批量圖片轉(zhuǎn)GIF動(dòng)圖(附源代碼)
本文介紹了一個(gè)Python實(shí)現(xiàn)的批量圖片轉(zhuǎn)GIF工具,提供簡(jiǎn)潔版和專業(yè)版兩種實(shí)現(xiàn)方案,該工具支持從指定目錄讀取PNG/JPG/BMP等格式圖片,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解下2026-04-04
python利用TextBlob庫實(shí)現(xiàn)輕松分析文本情感
TextBlob是一個(gè)基于NLTK(Natural Language Toolkit)和Pattern庫的Python庫,它提供了一系列方便的接口和方法來處理文本數(shù)據(jù),下面我們就來學(xué)習(xí)一下如何利用TextBlob庫實(shí)現(xiàn)輕松分析文本情感吧2023-12-12
Python簡(jiǎn)單網(wǎng)絡(luò)編程示例【客戶端與服務(wù)端】
這篇文章主要介紹了Python簡(jiǎn)單網(wǎng)絡(luò)編程,詳細(xì)介紹了客戶端與服務(wù)端的具體實(shí)現(xiàn)技巧與相關(guān)注意事項(xiàng),需要的朋友可以參考下2017-05-05
python實(shí)現(xiàn)冒泡排序算法的兩種方法
本篇文章主要介紹了python實(shí)現(xiàn)冒泡排序的兩種方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-03-03

