Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Raytracing 射线平面相交_Raytracing_Plane - Fatal编程技术网

Raytracing 射线平面相交

Raytracing 射线平面相交,raytracing,plane,Raytracing,Plane,我有以下问题,我无法解决,即使在互联网上搜索了很长时间 如何计算平面在光线中的交点 该平面由四个点描述: A (ax, ay, 0) B (bx, by, 0) C (cx, cy, 0) D (dx, dy, 0) 雷有: Vector3f origin; Vector3f direction; 现在,我想写一个检查命中率的方法。 有人能给我一个解决办法吗 public Boolean checkHit(Ray myRay){ . . . } 谢谢平面可以由单位法向量(nx,ny

我有以下问题,我无法解决,即使在互联网上搜索了很长时间

如何计算平面在光线中的交点

该平面由四个点描述:

A (ax, ay, 0)
B (bx, by, 0)
C (cx, cy, 0)
D (dx, dy, 0)
雷有:

Vector3f origin;
Vector3f direction;
现在,我想写一个检查命中率的方法。 有人能给我一个解决办法吗

public Boolean checkHit(Ray myRay){
.
.
.    
}

谢谢

平面可以由单位法向量
(nx,ny,nz)
和距原点的标量距离
d
来定义,这样平面的方程是
nx*x+ny*y+nz*z=d
。您需要将平面从3个点设置为该格式才能继续。如果你不知道如何从三个点查找平面

现在,可以通过单位方向向量
(ex,ey,ez)
和沿直线的某点
(rx,ry,rz)

  • 查找产品
    s=(nx*ex+ny*ey+nz*ez)
    。如果为零,则没有交点
  • 求交点到直线上点的距离
    t=(d-(nx*rx+ny*ry+nz*rz))/s
  • 交点位于
    c=(rx+ex*t,ry+ey*t,rz+ez*t)

  • 你可以在这里找到你的答案:@SlySherZ谢谢你的回复(我看到的链接),但我不理解,也无法应用于我的问题。你知道三点定义一个平面,而不是四点。我知道,但我能写它吗?同样在最一般的情况下,
    az
    bz
    cz
    dz
    都不是零。必须从四个点中选择三个点来定义一个平面,然后为下一个平面选择另外三个点。