亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Python利用plotly繪制正二十面體詳解

 更新時間:2023年02月24日 16:55:34   作者:微小冷  
plotly的Python軟件包是一個開源的代碼庫,是一款擅長交互的Python繪圖庫。本文就來用plotly繪制正二十面體,需要的可以參考一下

plotly 的 Python 軟件包是一個開源的代碼庫,它基于 plot.js,而后者基于 d3.js。我們實際使用的則是一個對 plotly 進行封裝的庫,名叫 cufflinks,能讓你更方便地使用 plotly 和 Pandas 數(shù)據表協(xié)同工作。

一言以蔽之,plotly是一款擅長交互的Python繪圖庫,下面就初步使用一下這個庫的三維繪圖功能。此前曾經用matplotlib畫了正二十面體和足球:Python繪制正二十面體;畫足球,這次用plotly復現(xiàn)一下正二十面體的繪制過程,也體驗一下這兩個繪圖包的差異。
來繪制一個正二十面體。

頂點

正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個頂點,由于點數(shù)較少,所以直接遍歷也不至于運算量爆炸。另一方面,正二十面體邊長相同,而這些相同的邊連接的也必然是最近的點,所以接下來只需建立頂點之間的距離矩陣,并抽取出距離最短的線。

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)
# 由于存在舍入誤差,所以得到的邊的數(shù)值可能不唯一
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()

效果如圖所示

實現(xiàn)正二十面體

接下來要對面上色。由于三棱成個面,所以只需得到所有三條棱的組合,只要這三條棱可以組成三角形,就能獲取所有的三角面。當然,這一切的前提是,正二十面體只有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繪制正二十面體的資料請關注腳本之家其它相關文章!

相關文章

  • 詳解python3安裝pillow后報錯沒有pillow模塊以及沒有PIL模塊問題解決

    詳解python3安裝pillow后報錯沒有pillow模塊以及沒有PIL模塊問題解決

    這篇文章主要介紹了python3安裝pillow后報錯沒有pillow模塊以及沒有PIL模塊問題解決,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-04-04
  • Python協(xié)程方式的實現(xiàn)及意義筆記分享

    Python協(xié)程方式的實現(xiàn)及意義筆記分享

    協(xié)程也被稱為微線程,是一種用戶態(tài)的上下文切換技術,簡而言之,就是通過一個線程實現(xiàn)代碼互相切換執(zhí)行,本文主要給大家介紹實現(xiàn)協(xié)程的幾種方法
    2021-09-09
  • 使用pandas忽略行列索引,縱向拼接多個dataframe

    使用pandas忽略行列索引,縱向拼接多個dataframe

    這篇文章主要介紹了使用pandas忽略行列索引,縱向拼接多個dataframe的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • Python實現(xiàn)Ollama的提示詞生成與優(yōu)化

    Python實現(xiàn)Ollama的提示詞生成與優(yōu)化

    這篇文章主要為大家詳細介紹了Python實現(xiàn)Ollama的提示詞生成與優(yōu)化的相關知識,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2024-12-12
  • Pandas數(shù)據集的分塊讀取的實現(xiàn)

    Pandas數(shù)據集的分塊讀取的實現(xiàn)

    本文主要介紹了Pandas數(shù)據集的分塊讀取的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-08-08
  • 利用pip安裝python第三方庫的4種方法

    利用pip安裝python第三方庫的4種方法

    Python最強大的功能之一是能夠十分方便地使用性能優(yōu)異的第三方庫,這些庫涵蓋了大量的不同領域,下面這篇文章主要給大家介紹了關于利用pip安裝python第三方庫的4種方法,需要的朋友可以參考下
    2023-02-02
  • python中sort和sorted排序的實例方法

    python中sort和sorted排序的實例方法

    在本篇文章中小編給大家?guī)淼氖顷P于python中sort和sorted排序的實例方法以及相關知識點,有需要的朋友們可以學習下。
    2019-08-08
  • Python利用Charles 實現(xiàn)全部自動答題思路流程分析

    Python利用Charles 實現(xiàn)全部自動答題思路流程分析

    這篇文章主要介紹了Python利用Charles 實現(xiàn)全部自動答題思路流程分析,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-08-08
  • Python 實現(xiàn) 貪吃蛇大作戰(zhàn) 代碼分享

    Python 實現(xiàn) 貪吃蛇大作戰(zhàn) 代碼分享

    本文給大家分享的是一個使用cocos2d-python游戲引擎庫制作出來的貪吃蛇大作戰(zhàn)的游戲代碼,基于Python 2.7 和 cocos2d 庫,有需要的小伙伴可以參考下
    2016-09-09
  • python使用pgzero進行游戲開發(fā)

    python使用pgzero進行游戲開發(fā)

    今天要和大家分享的pgzero(pygame zero)是在pygame基礎上做了進一步的封裝,使得設計一款游戲十分的方便,特別適合少兒編程領域的教學, 與scratch相得益彰。
    2021-06-06

最新評論