2017-02-19 28 views
0

我需要計算兩點之間垂直的向量。垂直於點的向量

enter image description here 我可以得到原始載體是這樣的:

dir.x = point2.x - point1.x; 
    dir.y = point2.y - point1.y; 
    float hyp = (float) Math.sqrt(dir.x*dir.x + dir.y*dir.y); 

    if(hyp != 0){ 
     dir.x /= hyp; 
     dir.y /= hyp; 

    } 

但我不知道如何讓垂直向量。

+0

因此,第1,2點是來自圖像的'A','B',你想要得到紅色? –

+0

您已經計算了長度AB,而不是矢量。 – Jason

+0

我需要兩個,但我認爲他們彼此都是消極和積極的? – bigcodeszzer

回答

1

翻轉X和Y,使他們的一個負,再由長度除以正常化:

double x1 = y; 
double y1 = -x; 
double length1 = Math.sqrt(x1*x1 + y1*y1); 
double x1 /= length; 
double y1 /= length; 

double x2 = -y; 
double y2 = x; 
double length2 = Math.sqrt(x2*x2 + y2*y2); 
double x2 /= length; 
double y2 /= length; 

您也應該檢查長度爲非零。

0

在二維工作時,只需切換另一個矢量的x和y座標並取反,就可以獲得垂直矢量。這可以通過將2D旋轉90度並注意正弦爲1和餘弦爲0來證明,所以這些值只是切換位置。

+1

如果向量是(1,1),並切換座標,結果向量顯然不是垂直。您還需要反轉一個座標。 –

+0

@FrankPuffer確實如此。已經混淆了正弦和餘弦,並忘記了標誌。 –