[英]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.