[英]3D Line/Vector intersection point of Rect3D/Plane
如果給定一個框並根據其8個頂點AH對其進行定義,並定義其6個面,例如:
ABC
ADE
FBC
FGH
DGH
ABE
以及由方向向量<vx,vy,vz>
和點(x0,y0,z0)
定義的一條直線(x0,y0,z0)
您只需遍歷它們中的每一個,即可獲得直線相交的2個不同點。 因此,給定一個點,方向向量和該盒子的3個頂點...
//p0 is point on line
//direction is direction vector of line
//A,B,C are points on plane
Vector3 lpIntersect(Vector3 p0, Vector3 direction, Vector3 A, Vector3 B, Vector3 C){
Vector3 n = (B - C).cross(C - A);
Vector3 num = (p0-A)*n;
Vector3 denom = direction*n;
if((num.x==0 && num.y==0 && num.z==0) ||
(denom.x==0 && denom.y==0 && denom.z==0))
return Vector3(0,0,0);
return num/denom;
}
一旦獲得2個點(Ax,Ay,Az)
它們稱為(Ax,Ay,Az)
和(Bx,By,Bz)
並用直線的方程式
x = x0 + vx*t
y = y0 + vy*t
z = z0 + vz*t
您可以插入上述各點並求解t
以獲取例如(x-x0)/vx
值,以查看哪個點朝着您給出的方向前進,如果t>=0
則該點朝着該方向前進您還給了另一點:
if (((Ax-x0)/vx)>=0){
x = Ax + vx*50;
y = Ay + vy*50;
z = Az + vz*50;
}
else{
x = Bx + vx*50;
y = By + vy*50;
z = Bz + vz*50;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.