日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

利用Matplotlib绘制莫比乌斯带

發(fā)布時間:2024/3/12 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 利用Matplotlib绘制莫比乌斯带 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

莫比烏斯帶是把一根紙條扭轉(zhuǎn) 180 度后,再把兩頭粘起來做成的紙帶圈。從拓撲學的角度看,莫比烏斯帶非常神奇,因為它總共只有一個面!下面我們就用 Matplotlib 的三維工具來畫一條莫比烏斯帶。此時的關鍵是想出它的繪圖參數(shù):由于它是一條二維帶,因此需要兩個內(nèi)在維度(intrinsic dimensions)。讓我們把一個維度定義為 θ,取值范圍為 0~2π;另一個維度是 w,取值范圍是 -1 ~ 1,表示莫比烏斯帶的寬度:

theta = np.linspace(0, 2 * np.pi, 30) w = np.linspace(-0.25, 0.25, 8) w, theta = np.meshgrid(w, theta)

有了參數(shù)之后,我們必須確定帶上每個點的直角坐標 ( x, y, z )。
仔細思考一下,我們可能會找到兩種旋轉(zhuǎn)關系:一種是圓圈繞著圓心旋轉(zhuǎn)(角度用 θθθ 定義),另一種是莫比烏斯帶在自己的坐標軸上旋轉(zhuǎn)(角度用 ΦΦΦ 定義)。因此,對于一條莫比烏斯帶,我們必然會有環(huán)的一半扭轉(zhuǎn) 180 度,即 ΔΦ=Δθ/2Δ Φ = Δ θ / 2ΔΦ=Δθ/2

phi = 0.5 * theta

現(xiàn)在用我們的三角學知識將極坐標轉(zhuǎn)換成三維直角坐標。定義每個點到中心的距離(半徑)r,那么直角坐標 ( x, y, z ) 就是:

# x - y平面內(nèi)的半徑 r = 1 + w * np.cos(phi) x = np.ravel(r * np.cos(theta)) y = np.ravel(r * np.sin(theta)) z = np.ravel(w * np.sin(phi))

最后,要畫出莫比烏斯帶,還必須確保三角剖分是正確的。最好的實現(xiàn)方法就是首先用基本參數(shù)化方法定義三角剖分,然后用 Matplotlib 將這個三角剖分映射到莫比烏斯帶的三維空間里,這樣就可以畫出圖形:

# 用基本參數(shù)化方法定義三角剖分 from matplotlib.tri import Triangulation tri = Triangulation(np.ravel(w), np.ravel(theta)) ax = plt.axes(projection='3d') ax.plot_trisurf(x, y, z, triangles=tri.triangles, cmap='viridis', linewidths=0.2); ax.set_xlim(-1, 1); ax.set_ylim(-1, 1); ax.set_zlim(-1, 1);

總結(jié)

以上是生活随笔為你收集整理的利用Matplotlib绘制莫比乌斯带的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。