數學圖形之克萊因瓶(klein bottle)


克萊因瓶是一種內外兩面在同一個曲面上的圖形.

在數學領域中,克萊因瓶(德語:Kleinsche Flasche)是指一種無定向性的平面,比如二維平面,就沒有“內部”和“外部”之分。克萊因瓶最初的概念提出是由德國數學家菲利克斯·克萊因提出的。克萊因瓶和我上一篇講的莫比烏斯帶非常相像。一個是內外兩面是在同一個曲面上,另一個是里外兩面在同一個曲面上.

克萊因瓶的形狀是,一個瓶子底部有一個洞,現在延長瓶子的頸部,並且扭曲地進入瓶子內部,然后和底部的洞相連接。

下面將展示幾種莫比烏斯帶的生成算法和切圖,使用自己定義語法的腳本代碼生成數學圖形.相關軟件參見:數學圖形可視化工具,該軟件免費開源.

 

以下是從維基上查到的公式

克萊因瓶的參數十分復雜:

\begin{align}
&x(u,v) = -\frac{2}{15} \cos u (3 \cos{v}-30 \sin{u}+90 \cos^4{u} \sin{u} -60 \cos^6{u} \sin{u}+5 \cos{u} \cos{v} \sin{u}) \\
&y(u,v) = -\frac{1}{15} \sin u (3 \cos{v}-3 \cos^2{u} \cos{v}-48 \cos^4{u} \cos{v}+48 \cos^6{u} \cos{v}-60 \sin{u}+5 \cos{u} \cos{v} \sin{u}\\
&\quad\quad\quad\quad -5 \cos^3{u} \cos{v} \sin{u}-80 \cos^5{u} \cos{v} \sin{u}+80 \cos^7{u} \cos{v} \sin{u}) \\
&z(u,v) = \frac{2}{15} (3+5 \cos{u} \sin{u}) \sin{v}\\
&(0\le u < \pi,0\le v < 2\pi)
\end{align}

寫成我的腳本代碼為:

vertices = D1:80 D2:160
u = from 0 to PI D1
v = from 0 to (2*PI) D2
a = sin(u)
b = cos(u)
c = sin(v)
d = cos(v)
e = 3*d - 3*b*b*d - 48*pow(b, 4)*d + 48*pow(b, 6)*d - 60*a + 5*b*d*a - 5*pow(b, 3)*d*a - 80*pow(b, 5)*d*a + 80*pow(b, 7)*d*a
x = -2/15*b*(3*d - 30*a + 90*pow(b, 4)*a - 60*pow(b, 6)*a + 5*b*d*a)
y = -1/10*a*e
z = 2/15*(3 + 5*b*a)*c

u = u*5
v = v*2.5

公式好復雜,我竟然寫對了:

 

還有一個較簡單的

\begin{align}
&x(u,v)=\cos u(cos\frac{u}{2}(\sqrt{2}+\cos v)+\sin\frac{u}{2}\sin v\cos v)\\
&y(u,v)=\sin u(cos\frac{u}{2}(\sqrt{2}+\cos v)+\sin\frac{u}{2}\sin v\cos v)\\
&z(u,v)=-\sin\frac{u}{2}(\sqrt{2}+\cos v)+\cos\frac{u}{2}\sin v\cos v
\end{align}

寫成我的腳本代碼為:

vertices = D1:160 D2:160
u = from 0 to (4*PI) D1
v = from 0 to (2*PI) D2

a = sin(u)
b = cos(u)

c = sin(v)
d = cos(v)

e = sin(u/2)
f = cos(u/2)

x = b*(f*(sqrt(2) + d) + e*c*d)
z = a*(f*(sqrt(2) + d) + e*c*d)
y = -e*(sqrt(2) + d) + f*c*d

可惜這似乎是錯的.生成的圖形不是克萊因瓶.

此外,我還從別的地方找到關於克萊因瓶的公式.這兩個公式生成的圖形差不多,也不像克萊因瓶,而是一個8字形的曲線繞圈而成的曲面.

klein_bottle

#http://xahlee.info/surface/klein_bottle/klein_bottle.html

vertices = D1:100 D2:100

u = from 0 to (PI*2) D1
v = from 0 to (PI*2) D2

a = 3

x = (a+cos[v/2]*sin[u]-sin[v/2]*sin[2*u])*cos[v]
z = (a+cos[v/2]*sin[u]-sin[v/2]*sin[2*u])*sin[v]
y = sin[v/2]*sin[u]+cos[v/2]*sin[2*u]

klein

#http://www.mathcurve.com/surfaces/klein/klein.shtml
vertices = D1:100 D2:100
u = from 0 to (PI*2) D1
v = from 0 to (PI*2) D2
a = rand2(1, 10)
b = rand2(1, 10)
x = [a + b*(cos(u/2)*sin(v) - sin(u/2)*sin(2*v))]*cos(u)
z = [a + b*(cos(u/2)*sin(v) - sin(u/2)*sin(2*v))]*sin(u)
y = b*[sin(u/2)*sin(v) + cos(u/2)*sin(2*v)]

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM