2017-02-19 5 views
0

2点間の垂直ベクトルを計算する必要があります。ベクトル点に垂直に

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

2次元で作業するときは、他のベクトルのx座標とy座標を切り替えて、反転するだけで垂直ベクトルを得ることができます。これは、2D回転を90度回転させて、正弦が1と余弦0であることに注目し、値がちょうど入れ替わるようにすることで証明できます。

+1

ベクトルが(1,1)で座標を切り替えると、結果のベクトルは明らかに垂直ではありません。また、1つの座標を反転する必要があります。 –

+0

@FrankPufferうん、まさに。すでに正弦波と余弦波を噛んでサインを忘れてしまった。 –