簡體   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