32 const T d1 =
dot( ab, ap );
33 const T d2 =
dot( ac, ap );
34 if ( d1 <= 0 && d2 <= 0 )
35 return { a, { 0, 0 } };
38 const T d3 =
dot( ab, bp );
39 const T d4 =
dot( ac, bp );
40 if ( d3 >= 0 && d4 <= d3 )
41 return { b, { 1, 0 } };
44 const T d5 =
dot( ab, cp );
45 const T d6 =
dot( ac, cp );
46 if ( d6 >= 0 && d5 <= d6 )
47 return { c, { 0, 1 } };
49 const T vc = d1 * d4 - d3 * d2;
50 if ( vc <= 0 && d1 >= 0 && d3 <= 0 )
52 const T v = d1 / ( d1 - d3 );
53 return { a + v * ab, { v, 0 } };
56 const T vb = d5 * d2 - d1 * d6;
57 if ( vb <= 0 && d6 <= 0 )
60 const T v = d2 / ( d2 - d6 );
61 return { a + v * ac, { 0, v } };
64 const T va = d3 * d6 - d5 * d4;
69 return { b, { 1, 0 } };
73 return { c, { 0, 1 } };
76 const T v = ( d4 - d3 ) / ( ( d4 - d3 ) + ( d5 - d6 ) );
77 return { b + v * ( c - b ), { 1 - v, v } };
80 assert( va > 0 && vb > 0 && vc > 0 );
81 const T denom = 1 / ( va + vb + vc );
82 const T v = vb * denom;
83 const T w = vc * denom;
84 return { a + v * ab + w * ac, { v, w } };
constexpr auto dot(A a, A b)
Definition MRImGuiVectorOperators.h:129
Definition MRCameraOrientationPlugin.h:8
MRMESH_CLASS Vector3
Definition MRMesh/MRMeshFwd.h:137