2017-01-31 49 views
-1

enter image description hereAndroid中的點的旋轉

我有點A,B和CD的寬度(A'= A)。如果用戶將B點移到B點,我可以知道點C'D'的座標。如果有人用3個輸入參數(A,B和CD的寬度)輸出C'和D'的座標,我會非常感激。作爲獎勵,我可以通過Paypal支付50美元。

+0

嘗試Fiverr或Upwork請糾正。這是專業程序員的問答網站! – OBX

+0

嗨。我自己是一名程序員。我需要這個任務的幫助。 – Jumper

+0

它們是2D還是3D座標? –

回答

0

背景:

首先,如果我理解正確的話,這個任務其實就是「給出A和B的座標,找到C和d的座標,如果我們知道AB和CD是垂直的,而且我們知道CD的」

要計算的座標的長度,我們使用3個基本的數學方程:

  • 線從2點A,B:y = (x - B.x)* (A.y - B.y)/(A.x - B.x) + B.y

    如果我們設置m = (A.y - B.y)/(A.x - B.x)

從2分A中的方程,B是:y = m * (x - B.x) + B.y

  • 線是垂直於上述(CD)的行:y = (-1/m) * x + y0

由於CD通過A,方程可以寫成:y = (-1/m) * (x - A.x) + A.y

  • 2點A,C之間的長度(d):d * d = (C.x - A.x) * (C.x - A.x) + (C.y - A.y) * (C.y - A.y)

從CD的方程,我們知道C.y = (-1/m)*(C.x - A.x) + A.y

因此: d*d = (C.x - A.x)*(C.x - A.x) + (1/(m*m))*(C.x - A.x)* (C.x - A.x)

輕鬆找出C.x - A.x = (+|-) (m*d)/Math.sqrt(m*m + 1)

在java中,我想你可以寫作爲

public Point[] findCD(Point A, Point B, int widthCD) { 
    if (A.x == B.x) { 
     return [new Point(A.x - widthCD/2, A.y), new Point(A.x + widthCD/2, A.y)] 
    } 
    if (A.y == B.y) { 
     return [new Point(A.x, A.y - widthCD/2), new Point(A.x, A.y + widthCD/2)] 
    } 

    var m = (A.y - B.y)/(A.x - B.x); 

    var xC = A.x - m*widthCD/(2 * Math.sqrt(m*m + 1)); 
    var xD = A.x + m*widthCD/(2 * Math.sqrt(m*m + 1)); 

    var yC = (A.x - xC)/m + A.y; 
    var yD = (A.x - xD)/m + A.y; 

    return [new Point(xC, yC), new Point(xD, yD)]; 
} 

注意:我沒有java的,如果我寫指針或陣列錯誤

+0

謝謝,它應該是+,而不是 - 。我編輯過它。 –