我有一組位於由Ax + By + Cz + d = 0定義的平面上的點(x1,x2,... xn)。 我想找到轉換矩陣來轉換並旋轉到XY平面。所以,新的點座標將是x1'=(xnew,ynew,0)。將3D點轉換爲2D
很多答案都給出了四元數,點或叉積矩陣。我不確定哪一個是正確的方法。
謝謝
我有一組位於由Ax + By + Cz + d = 0定義的平面上的點(x1,x2,... xn)。 我想找到轉換矩陣來轉換並旋轉到XY平面。所以,新的點座標將是x1'=(xnew,ynew,0)。將3D點轉換爲2D
很多答案都給出了四元數,點或叉積矩陣。我不確定哪一個是正確的方法。
謝謝
首先,除非在你的平面方程,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(Z∙V/||V||) = cos-1(Z∙V') = cos-1(C')
軸ř關於哪個旋轉只是歸一化平面的正交叉積V'和 Z。也就是說
R = V'×Z = (B', -A', 0)
現在你可以使用這個角度/軸對建立在你的數據集旋轉所有的點平行於XY平面的平面所需要的quaternion rotation。然後,我剛纔說過,只需放下Z分量即可在XY平面上執行正交投影。
更新:在使用API獲取軸/角度對之前,antonakos關於正常化R有一個好處。
在我看來,似乎沒有單一的轉換矩陣 - 你不知道圍繞曲面法線旋轉(A,B,C)。如果你的表面是一個銷子上的銷子(銷子是表面正常的),並且我旋轉了銷子而不用移動銷子,那就不會被記錄下來。那麼你只是在尋找能夠保持距離和角度的變換嗎?或者例如你有一對特定的點,你知道都在X軸上? – Tommy 2011-06-07 11:48:22