Beispiel #1
0
    public float IntersectsAt(PlaneMath plane)
    {
        Coords N  = TMath.Cross(plane.u, plane.v);
        Coords AB = plane.A - A;

        if (TMath.Dot(N, v) == 0)
        {
            return(float.NaN);
        }

        float t = TMath.Dot(N, AB) / TMath.Dot(N, v);

        return(t);
    }
Beispiel #2
0
    public Coords Reflect(Coords normal)
    {
        //R = A - 2(A.N)N
        Coords norm  = normal.GetNormal();
        Coords vnorm = v.GetNormal();

        float d = TMath.Dot(norm, vnorm) * 2;

        if (d == 0)
        {
            return(v);
        }

        return(vnorm - norm * d);
    }
Beispiel #3
0
    public float IntersectsAt(Line l)
    {
        if (TMath.Dot(Coords.Perp(l.v), v) == 0)
        {
            return(float.NaN);
        }

        Coords c = l.A - this.A;
        float  t = TMath.Dot(Coords.Perp(l.v), c) / TMath.Dot(Coords.Perp(l.v), v);

        if (t < 0 || t > 1 && type == LINETYPE.SEGMENT)
        {
            return(float.NaN);
        }

        return(t);
    }