检查射线是否与虚拟框相交

24沙龙:

我有一个虚拟盒子,其中包含2个3DPoint,一个是最小值(x,y,z),第二个是最大值(x,y,z)

我的光线带有中心点和方向向量

如何检查矢量是否与此虚拟框具有交集

(我拥有dotProduct,crossProduct,distance等的所有方法),但我不知道如何开始寻找是否有交点s,

在附加图像中,我尝试显示2种状态,一种状态是射线具有相交,而另一种状态则没有。如何通过代码找到它

现在,如果有交叉点,我只需要查找布尔值,而我实际上不需要查找这些点。

public class BoundaryVolume {

    public Point3D min;
    public Point3D max;
....

public boolean boundingIntersection(Ray ray) {

     //Point3D p0 = ray.get_POO();
     //   Vector v = ray.get_direction();

     //   Vector v1 = min.subtract(p0);
     //   Vector v2 = max.subtract(p0);
     //   double s1 = v.dotProduct(v1.crossProduct(v2).normalized());
     //   if (isZero(s1)) return false;
    
    
}
}

射线:

public class Ray {

 private    Point3D _POO;
 private    Vector _direction;
....
}

我想检查是否有要点 在此处输入图片说明

MBO:

假设射线具有起点rx, ry, rz和方向向量dx, dy, dz,则轴对齐的框的两个角为A和B(B分量大于A分量)。

以参数形式,ray可能表示为

x = rx + t * dx
y = ry + t * dy
z = rz + t * dz

其中t是范围内的参数 0..Infinity

获取射线与平面Ax,Bx,Ay等的交点的t参数。

t_ax = (A.x - rx) / dx
t_bx = (B.x - rx) / dx
t_ay = (A.y - ry) / dy
...

选择参数的正值,并为每个计算交点是否位于相应的矩形中

y_ax = ry + t_ax * dy
z_ax = rz + t_ax * dz
if (A.y<=y_ax<=B.y) and ((A.z<=z_ax<=B.z)) 
    ray intersects a face
if not - continue with the next face

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章