繁体   English   中英

平面中2点的边界框

[英]Bounding box for 2 points in a plane

我在飞机上有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。

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

将A和B视为平面中的向量(xa,ya)和(xb,yb)。 取向量差,生成一个向量C,该向量从A指向B。

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的正弦和余弦因子最终为+/- 1。

如果矩阵乘法不是您的事,请在纸上画一个(或只是想像)任何象限中的样本矢量。 现在,将纸张沿任一方向旋转90度,看看x和y分量如何交换和取反。

如果优化使您无所适从,neirbowjs答案将转换为更优化的解决方案。

您知道的Var (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; 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM