C# 获取实际的线段

C# 获取实际的线段,c#,.net,algorithm,3d,C#,.net,Algorithm,3d,因为c#中没有3D矩形,所以我在这个链接中使用了平面和向量函数来表示3D中的矩形(有x,y,z) 我得到的直线方向是无限的,而代表矩形的平面是有限的,因为它们是矩形,如何得到相交的实际线段,函数返回直线上的任意两点(第一点,第二点),但不是相交线的实际端点中没有3D矩形。C#是一种语言,不是一组库。我添加了一个plane类,给它3分,我将3D中的矩形视为一个平面,仔细阅读我的问题 public Plane(Vector3 point1, Vector3 point2, Vector3 p

因为c#中没有3D矩形,所以我在这个链接中使用了平面和向量函数来表示3D中的矩形(有x,y,z)


我得到的直线方向是无限的,而代表矩形的平面是有限的,因为它们是矩形,如何得到相交的实际线段,函数返回直线上的任意两点(第一点,第二点),但不是相交线的实际端点

中没有3D矩形。C#是一种语言,不是一组库。我添加了一个plane类,给它3分,我将3D中的矩形视为一个平面,仔细阅读我的问题
    public Plane(Vector3 point1, Vector3 point2, Vector3 point3) {

        a = (point1.y * (point2.z - point3.z)) + (point2.y * (point3.z - point1.z))+ (point3.y * (point1.z - point2.z)) ;
        b = (point1.z * (point2.x - point3.x)) + (point2.z * (point3.x - point1.x))+ (point3.z * (point1.x - point2.x)) ;
        c = (point1.x * (point2.y - point3.y)) + (point2.x * (point3.y - point1.y)) + (point3.x *(point1.y - point2.y)) ;
        d = - (
            (point1.x *( (point2.y * point3.z ) - ( point3.y * point2.z) ))
            + 
            (point2.x *( (point3.y * point1.z ) - ( point1.y * point3.z) ))
            +
            (point3.x *( (point1.y * point2.z ) - ( point2.y * point1.z) ))

            ); }




    public void intersectionSecondTry(Plane SecondOne) {


        // Step 1. get the line direction ( true with paxeraview )
        //Vector3 LineDirection = Normal.Cross(SecondOne.Normal);

        float tempX1 = -100 ;

        float tempZ1 = ( (SecondOne.b/b)*d - SecondOne.d)/(SecondOne.c - c*SecondOne.b/b) ; 
        float tempY1 = (-c * tempZ1 -d) / b;

        FirstPoint =  new Vector3(tempX1, (float.IsNaN(tempY1) ? 0 : tempY1), (float.IsNaN(tempZ1) ? 0 : tempZ1));

        float tempX2 = 200 ;
        float tempZ2 = ((SecondOne.b / b) * d - SecondOne.d) / (SecondOne.c - c * SecondOne.b / b);
        float tempY2 = (-c * tempZ2 - d) / b;

        SecondPoint = new Vector3(tempX2, (float.IsNaN(tempY2) ? 0 : tempY2), (float.IsNaN(tempZ2) ? 0 : tempZ2));



    }