1. 數學分析
1) 2D笛卡爾座標系與2D極座標系
2D笛卡爾座標系就是平面直角座標系,不說了。
2D極座標系,是用方向和距離來定義2D空間中的點,而非x,y座標,如下圖:
其中極座標的參數用紅色表示,笛卡爾座標的參數用藍色字表示。
非常顯而易見,他們之間的轉換關係如下:
x = r * cos(theta)
y = r * sin(theta)
r = sqrt(x2 + y2)
theta = arctg(y/x)
2) 3D笛卡爾座標系
在2D笛卡爾座標系上增加了Z軸,形成3D笛卡爾座標系。分爲左手座標系和右手座標系。區分方法:用左手握住Z軸,大拇指伸直,其他四指的指尖方向從X軸轉向Y軸,如果大拇指的指向是Z的正半軸,則爲左手座標系,反之爲右手。
3) 3D柱面座標系
3D柱面座標系和2D的極座標系對應,只是在2D極座標系上增加了一條Z軸,所以3D笛卡爾座標系與3D柱面座標系的轉換也非常簡單:x和y以及r和theta都不變,只增加了Z座標而已。3D柱面座標系的表示方式是:P(r, theta, z)。
4) 3D球面座標系
這個是3D座標系中最複雜的,用P(p, phi, theta)表示。其中p是點P到原點的距離,phi是原點到點P的直線與正Z軸的夾角,theta是原點到點P的線段在X-Y平面上的投影與X軸之間的夾角,其實正好是極座標theta。由於比較複雜,如圖所示:
現在可以推導一下(p,phi,theta)與(x,y,z)的關係了。
由圖上可以得知:
OP在X-Y平面上的投影長度r = sqrt(x2+y2)
p = sqrt(x2+y2+z2)
Sin(phi) = r / p,所以
phi = arcsin(r / p)
tg(theta) = y / x
theta = arctg(y/x)
從p,phi,theta如何得到x,y,z呢:
r = p * Sin(phi)
x = r * Cos(theta)
y = r * Sin(theta)
z = p * Cos(phi)
代入整理得:
x = p * Sin(phi) * Cos(theta)
y = p * Sin(phi) * Sin(theta)
z = p * Cos(phi)
弄清楚了上面的關係,就可以建立這些座標系下點的數據結構,以及轉換函數了。
2. 代碼實現
1) 結構體定義
2) 轉換函數定義
沒什麼可說的,全是套上面推出來的公式而已。
3. 代碼下載
完整項目源代碼下載:>>點擊進入下載頁<<