0

平面に2つの点AとBがあります。均一なバウンディングボックスを作成できるように、ポイントw、x、y、zを見つける必要があります。条件はwxによって形成される線であり、yzはABに平行です。同様に、wBzとxAyは並列である必要があります。また、角度zwxとwxyは直角であることに注意してください。基本的にwxyzは正方形でなければなりません。

          z
       /   /
     B      /
  /          /
w             /  
 /             y
  /          /
   /      A 
    /  /
     x

基本的に、線ABがx軸に平行であるか、ABがy軸に平行である場合、w、x、y、およびzを見つけるのは簡単です。線ABがx軸と角度を持っているときに、点w、x、y、zを決定するのに問題があります(線ABの傾きは正または負の可能性があります)。

コメント/提案は大歓迎です。ありがとう!

4

2 に答える 2

3

A と B を平面 (xa, ya) と (xb, yb) のベクトルとして扱います。ベクトルの差をとって、A から B を指すベクトル C を生成します。

C = A - B = (xa - xb, ya - yb) = (xc, yc)

このベクトルを各方向に 90 度回転し、半分にスケ​​ーリングして、D = (xd, yd) および E = (xe, ye) を取得します。

D = (-yc/2, +xc/2)
E = -D = (+yc/2, -xc/2)

ベクトル演算を使用して、正方形の 4 つの点を取得します。

w = B + D
x = A + D
y = A + E
z = B + E

編集:太い指。

EDIT2:半分の係数を忘れました。

EDIT3 : 要求に応じて、ベクトル回転参照。

ベクトルの回転を計算するには、一般に、回転行列で乗算を実行できます。この場合、+/- pi/2 の sin 因子と cos 因子は +/- 1 になります。

行列の乗算が苦手な場合は、任意の象限のサンプル ベクトルを紙に描いてください (または単に想像してください)。次に、紙をいずれかの方向に 90 度回転させ、x 成分と y 成分がどのように入れ替わって無効になるかを確認します。

于 2013-01-08T17:20:59.667 に答える
1

neirbowjs の回答は、最適化によってボートが浮かぶ場合、より最適化されたソリューションに変換されます。

あなたが知っているVars (Ax, Ay, Bx, By);

あなたが解く変数(Wx, Wy, Xx, Xy, Yx, Yy,Zx, Zy);

float dx = By - Ay / 2;
float dy = Bx - Ax / 2;

float Wx = Ax - dx; 
float Wy = Ay + dy; 
float Zx = Ax + dx; 
float Zy = Ay - dy; 
float Xx = Bx - dx; 
float Xy = By + dy; 
float Yx = Bx + dx; 
float Yy = By - dy; 
于 2013-01-08T17:48:02.347 に答える