利用Matplotlib绘制莫比乌斯带
生活随笔
收集整理的這篇文章主要介紹了
利用Matplotlib绘制莫比乌斯带
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
莫比烏斯帶是把一根紙條扭轉 180 度后,再把兩頭粘起來做成的紙帶圈。從拓撲學的角度看,莫比烏斯帶非常神奇,因為它總共只有一個面!下面我們就用 Matplotlib 的三維工具來畫一條莫比烏斯帶。此時的關鍵是想出它的繪圖參數:由于它是一條二維帶,因此需要兩個內在維度(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)有了參數之后,我們必須確定帶上每個點的直角坐標 ( x, y, z )。
仔細思考一下,我們可能會找到兩種旋轉關系:一種是圓圈繞著圓心旋轉(角度用 θθθ 定義),另一種是莫比烏斯帶在自己的坐標軸上旋轉(角度用 ΦΦΦ 定義)。因此,對于一條莫比烏斯帶,我們必然會有環的一半扭轉 180 度,即 ΔΦ=Δθ/2Δ Φ = Δ θ / 2ΔΦ=Δθ/2。
現在用我們的三角學知識將極坐標轉換成三維直角坐標。定義每個點到中心的距離(半徑)r,那么直角坐標 ( x, y, z ) 就是:
# x - y平面內的半徑 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))最后,要畫出莫比烏斯帶,還必須確保三角剖分是正確的。最好的實現方法就是首先用基本參數化方法定義三角剖分,然后用 Matplotlib 將這個三角剖分映射到莫比烏斯帶的三維空間里,這樣就可以畫出圖形:
# 用基本參數化方法定義三角剖分 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);總結
以上是生活随笔為你收集整理的利用Matplotlib绘制莫比乌斯带的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 值得反复体会的几部电影
- 下一篇: 一文搞懂电子电路