我在一架飞机上有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线的斜率可能是正的或负的)。
任何意见/建议都非常感谢。谢谢!
答案 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;