1

データの一部を分析するスクリプトを実装しようとしています。3 点 (p1、p2、p3) の位置情報があります。この図のように、ベクトル p1p2 から点 p3 の角度変位を見つけたいと思います。

角度

p3a、p3b、p3c、p3d は、p3 の可能な相対位置を示します。示されているように、ベクトル p1p2 に対する相対位置を表す出力角度の符号が必要です。

私が使用しているコードは次のとおりです(図に適合):

v1 = p2 - p1;
x1 = v1(1);
y1 = v1(2);
v2 =  p1 - p3;
x2 = v2(1);
y2 = v2(2);
angle = atan2d(x1*y2-y1*2,x1*x2+y1*y2);

これは、p3 が p3a にある場合に希望どおりに機能し、正しいサイズ (-77 度) の負の角度を与えます。ただし、p3 が p3d にある場合、目的の大きな負の角度ではなく、大きな正の角度 (+150 度) が出力されます。

4

2 に答える 2

1

言及されたいくつかのコメントのように、私はあなたが を使用するか を使用するかについて少し混乱していv2=p1-p3ますv2=p3-p1。とにかく、この方法は任意の 2 つのベクトルvで機能し、参照ベクトル (角度を測定するベクトル)はuどこにありますか。u

vx = v(1); vy= v(2); ux = u(1); uy = u(2);
va = -atan2d(vy,vx);         % angle of v relative to x-axis (clockwise = +ve)
ua = -atan2d(uy,ux);         % angle of u relative to x-axis (clockwise = +ve)
A = va - ua;                             % angle va relative to ua
A = A - 360*(A > 180) + 360*(A < -180)   % correction put in [-180,180]

これは、時計回りの方向を正の方向とすることを前提としていますu。それ以外の場合は、 の符号を反転するだけですA

于 2015-02-26T00:04:24.533 に答える