2011-06-07 275 views
6

我有一組位於由Ax + By + Cz + d = 0定義的平面上的點(x1,x2,... xn)。 我想找到轉換矩陣來轉換並旋轉到XY平面。所以,新的點座標將是x1'=(xnew,ynew,0)。將3D點轉換爲2D

很多答案都給出了四元數,點或叉積矩陣。我不確定哪一個是正確的方法。

謝謝

+1

在我看來,似乎沒有單一的轉換矩陣 - 你不知道圍繞曲面法線旋轉(A,B,C)。如果你的表面是一個銷子上的銷子(銷子是表面正常的),並且我旋轉了銷子而不用移動銷子,那就不會被記錄下來。那麼你只是在尋找能夠保持距離和角度的變換嗎?或者例如你有一對特定的點,你知道都在X軸上? – Tommy 2011-06-07 11:48:22

回答

7

首先,除非在你的平面方程,d = 0,沒有linear transformation你可以申請。您需要改爲執行affine transformation

要做到這一點的一種方法是確定一個角度和矢量,以使您的點位於與XY平面平行的平面上(即,變換點集的Z分量都具有相同的值) 。然後你只需放下Z分量。

爲此,讓 V是包含您的點的平面的歸一化平面法線。爲方便起見從平面方程上述AX + +鋯+ d限定= 0:

V = (A, B, C) 
V' = V/||V|| = (A', B', C') 
Z = (0, 0, 1)

其中

A' = A/||V|| 
B' = B/||V|| 
C' = C/||V|| 
||V|| = (A2+B2+C2)1/2

的角度將簡單地:

θ = cos-1(ZV/||V||) 
    = cos-1(ZV') 
    = cos-1(C')

ř關於哪個旋轉只是歸一化平面的正交叉積V' Z。也就是說

R = V'×Z 
    = (B', -A', 0)

現在你可以使用這個角度/軸對建立在你的數據集旋轉所有的點平行於XY平面的平面所需要的quaternion rotation。然後,我剛纔說過,只需放下Z分量即可在XY平面上執行正交投影。

更新:在使用API​​獲取軸/角度對之前,antonakos關於正常化R有一個好處。

+1

符號問題:'R = V'×Z',而不是'R = Z×V''。另外值得注意的是,許多軸/角度API需要「R」進行標準化(目前還沒有)。 – antonakos 2011-06-07 23:45:17

+0

@antonakos:已更新。謝謝。 – andand 2011-06-08 02:32:21