矩形光线相交



我在C#中制作一个简单的Ray Traycer。对于我的视口,我有一个矩形类。

public class Rectangle3D
{
    public readonly Point3D Point1;
    public readonly Point3D Point2;
    public readonly Point3D Point3;
    public readonly Point3D Point4;
    public Rectangle3D(Point3D point1, Point3D point2, Point3D point3, Point3D point4)
    {
        this.Point1 = point1;
        this.Point2 = point2;
        this.Point3 = point3;
        this.Point4 = point4;
    }
    public Point3D FindCrossPoint(Ray ray)
    {
        //Intersection
    }

我该怎么写这个函数呢。非常感谢您的帮助。P.S Point3D具有所有必需的功能。如交叉、归一化等。

好吧,让我们把它放在一个答案的形式中,而不是所有的注释。

将您的问题分解为子问题:

1) 找到矩形所在的平面,形式为Ax+By+Cz+D=0两种方法:

方法一:

  • 求出两条正交线的方程;根据定义,矩形的边缘将是正交的。

  • 给定两条正交线,求出这些线定义的平面的方程,形式为Ax+By+Cz+D=0

这里有一些提示:

  • 假设两条正交线都穿过原点。使它们成为矢量。这两个向量的叉积是什么意思?

  • 叉积向量和你要寻找的平面之间的关系是什么?具体来说,叉积矢量与常数A、B和C之间的关系是什么?

方法二:

  • 在矩形上拾取三个不在一条线上的点;显然,任何三个角都可以。用Ax+By+Cz+D=0中的这些点代替x、y、z,得到三个新的方程;求解A、B、C和D的方程

2) 一旦有了平面的方程式,就可以计算出平面与光线的交点。

3) 现在有了交点——如果它存在,请记住,光线可能平行于平面,也可能完全在平面内——检查交点是否在矩形内。

  • 提示:这是"这一点在多边形内吗"这一更普遍问题的一个特例

相关内容

  • 没有找到相关文章

最新更新