예제 #1
0
        public bool Intersect(Ray3D ray, out float t, out float3 baricenter)
        {
            float3 P = V0;
            float3 N = cross(V1 - V0, V2 - V0);

            float den = dot(ray.D, N);

            if (den == 0)
            {
                t          = float.NaN;
                baricenter = float3(0, 0, 0);
                return(false);
            }

            t          = dot(P - ray.X, N) / den;
            baricenter = GTools.barycenter(ray.X + ray.D * t, V0, V1, V2);
            return(all(baricenter >= 0));
        }
예제 #2
0
 public float Distance(Segment3D other, out float3 closest1, out float3 closest2)
 {
     return(GTools.distanceS2S(A, B, other.A, other.B, out closest1, out closest2));
 }
예제 #3
0
 public float Distance(Segment3D other)
 {
     return(GTools.distanceS2S(A, B, other.A, other.B, out float3 _, out float3 _));
 }
예제 #4
0
파일: Line3D.cs 프로젝트: LauKle/teachingCG
 public float Distance(float3 pto, out float3 closest)
 {
     return(GTools.distanceP2L(pto, A, B, out closest));
 }