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)); }
public float Distance(Segment3D other, out float3 closest1, out float3 closest2) { return(GTools.distanceS2S(A, B, other.A, other.B, out closest1, out closest2)); }
public float Distance(Segment3D other) { return(GTools.distanceS2S(A, B, other.A, other.B, out float3 _, out float3 _)); }
public float Distance(float3 pto, out float3 closest) { return(GTools.distanceP2L(pto, A, B, out closest)); }