<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
plotly 的 Python 軟體包是一個開源的程式碼庫,它基於 plot.js,而後者基於 d3.js。我們實際使用的則是一個對 plotly 進行封裝的庫,名叫 cufflinks,能讓你更方便地使用 plotly 和 Pandas 資料表協同工作。
一言以蔽之,plotly是一款擅長互動的Python繪相簿,下面就初步使用一下這個庫的三維繪圖功能。此前曾經用matplotlib畫了正二十面體和足球:Python繪製正二十面體;畫足球,這次用plotly復現一下正二十面體的繪製過程,也體驗一下這兩個繪圖包的差異。
來繪製一個正二十面體。
正20面體的12個頂點剛好可以分為三組,每一組都是一個符合黃金分割比例的長方形,而且這三個長方形是互相正交的。
所以,想繪製一個正二十面體是比較容易的
import plotly import plotly.express as px import numpy as np from itertools import product G = (np.sqrt(5)-1)/2 def getVertex(): pt2 = [(a,b) for a,b in product([1,-1], [G, -G])] pts = [(a,b,0) for a,b in pt2] pts += [(0,a,b) for a,b in pt2] pts += [(b,0,a) for a,b in pt2] return np.array(pts) xs, ys, zs = getVertex().T fig = px.scatter_3d(x=xs, y=ys, z=zs, size=np.ones_like(xs)*0.5) fig.show()
得到頂點
接下來連線這12個頂點,由於點數較少,所以直接遍歷也不至於運算量爆炸。另一方面,正二十面體邊長相同,而這些相同的邊連線的也必然是最近的點,所以接下來只需建立頂點之間的距離矩陣,並抽取出距離最短的線。
def getDisMat(pts): N = len(pts) dMat = np.ones([N,N])*np.inf for i in range(N): for j in range(i): dMat[i,j] = np.linalg.norm([pts[i]-pts[j]]) return dMat pts = getVertex() dMat = getDisMat(pts) # 由於存在舍入誤差,所以得到的邊的數值可能不唯一 ix, jx = np.where((dMat-np.min(dMat))<0.01)
接下來,繪製正二十面體的稜
edges = [] for k in range(len(ix)): edges.append(pts[ix[k]].tolist() + [k]) edges.append(pts[jx[k]].tolist() + [k]) edges = np.array(edges) fig = px.line_3d(edges, x=0, y=1, z=2, color=3) fig.show()
效果如圖所示
接下來要對面上色。由於三稜成個面,所以只需得到所有三條稜的組合,只要這三條稜可以組成三角形,就能獲取所有的三角面。當然,這一切的前提是,正二十面體只有30個稜,即使遍歷多次,也無非27k的計算量,是完全沒問題的。
def isFace(e1, e2, e3): pts = np.vstack([e1, e2, e3]) pts = np.unique(pts, axis=0) return len(pts)==3 edges = [pts[[i,j]] for i,j in zip(ix, jx)] from itertools import combinations faces = [es for es in combinations(edges, 3) if isFace(*es)]
最後得到的faces有20個元素,每個元素由3條稜組成,每條稜有兩個頂點,故而可以縮減為三個頂點。
ptFace = [np.unique(np.vstack(f),axis=0) for f in faces] ptFace = np.vstack(ptFace)
接下來繪製一下,plotly繪製三角面的邏輯是,除了需要指定三角面的三個座標之外,還需指定三角面的頂點序號
import plotly.figure_factory as ff simplices = np.arange(len(ptFace)).reshape(-1,3) fig = ff.create_trisurf(x=ptFace[:,0], y=ptFace[:,1], z=ptFace[:,2], simplices=simplices) fig.show()
效果如下
以上就是Python利用plotly繪製正二十面體詳解的詳細內容,更多關於Python plotly繪製正二十面體的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45