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 轴成角度时(线 AB 的斜率可以是正或负),我无法确定点 w、x、y 和 z。

任何意见/建议都将受到高度赞赏。谢谢!

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)

使用向量算术得到正方形的四个点。

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 答案翻译成更优化的解决方案,如果优化让你的船浮起来。

你知道的变量(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 回答