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