[英]Given the co-ordinates of n points in 2-D plane, find the number of triplets that form right triangle
[英]How to find co-ordinates of a point from four points that can translate or rotate? All these points form a rigid body
我有一個剛體,可以繞垂直於屏幕的軸平移和/或旋轉。 我在剛體上有四個點的坐標。 如何才能獲得剛體上未知點的坐標?
我可以用四個已知點形成一個線性方程來得到第五個未知點嗎? 如何在等式中適應平移和旋轉?
關於點p和平移t'的θ的旋轉的任何組合可以表示為關於原點的θ的旋轉,隨后是合適的平移t 。 所以問題就是從已知點計算出θ和t的值。 然后轉換可以應用於未知點。
我認為,最簡單的工作方式是齊次坐標。 對於列向量,通過θ圍繞原點的旋轉由矩陣M( θ )表示:
cos(θ) sin(θ) 0
-sin(θ) cos(θ) 0
0 0 1
t =( tx , ty ,1)的翻譯T由矩陣T( t )表示:
1 0 tx
0 1 ty
0 0 1
整體變換是乘積T( t )M( θ )。 這需要針對三個未知數θ , tx和ty來解決。 有四個已知點,有八個方程(每個點兩個,對應於x和y坐標),所以有足夠的信息來解決未知數。 這只是插入已知點的值的問題。
由於您擁有的點多於所需的點,因此您可以使用所有點並求解過度完整的系統以獲得可能更精確的變換矩陣(如果您對變換坐標的精度不肯定,這將非常有用)。
在更多細節中,您可以將轉換矩陣表示為
a b c
-b a d
0 0 1
對於某些參數a,b和c(如果你真的需要,你可以計算出這些a,b和c的角度和xy平移)。 然后我們從四個點(x_i,y_i)和結果(x_i',y_i')中的每一個得到這兩個方程式:
a x_i + b y_i + c = x_i'
a y_i + -b x_i + d = y_i'
然后你可以將8個方程重寫為具有變量(a,b,c,d)的線性方程組,如下所示(矩陣形式):
x_1 y_1 1 0 x_1'
y_1 -x_1 0 1 a y_1'
x_2 y_2 1 0 b x_2'
y_2 -x_2 0 1 * c = y_2'
x_3 y_3 1 0 d x_3'
y_3 -x_3 0 1 y_3'
x_4 y_4 1 0 x_4'
y_4 -x_4 0 1 y_4'
或Ax = B,其中A是左邊的矩陣,x = [abcd]',B =右邊的矢量。
現在,使用SVD分解A以獲得UDV'。 然后x可以被發現為VD -1 U'B,其中D -1是對角矩陣D的倒數。有關SVD的更多信息,請查看奇異有效分解(SVD) 。
取兩個舊點A,B(線)而不失一般性假設A是原點。 看看A'和B'。 將A'轉換為A並將相應的轉換轉換為B'=> b''。 找到角度,你就有了有效的平移和旋轉。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.