在一个平面中2点的边界框

时间:2013-01-08 17:02:45

标签: c algorithm math geometry bounding-box

我在一架飞机上有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线的斜率可能是正的或负的)。

任何意见/建议都非常感谢。谢谢!

2 个答案:

答案 0 :(得分: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 :根据要求提供矢量旋转参考。

为了计算向量旋转,通常可以用rotation matrix进行乘法运算。在这种情况下,+ / - pi / 2的sin和cos因子最终为+/- 1。

如果矩阵乘法不是你的事,那么在任何象限中绘制(或者只是想象)一个样本矢量。现在将纸张向任一方向旋转90度,看看x和y组件如何交换并取消。

答案 1 :(得分: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;