37 U
interpolate(
const U & v0,
const U & v1,
const U & v2 )
const
38 {
return ( 1 -
a -
b ) * v0 +
a * v1 +
b * v2; }
58 return s << tp.
a <<
' ' << tp.
b;
74 const T v11 = dot( v1, v1 );
75 const T v12 = dot( v1, v2 );
76 const T v22 = dot( v2, v2 );
77 const T det = v11 * v22 - v12 * v12;
84 const T pv1 =
dot( p, v1 );
85 const T pv2 =
dot( p, v2 );
86 a = std::clamp( ( 1 / det ) * ( v22 * pv1 - v12 * pv2 ), T(0), T(1) );
87 b = std::clamp( ( 1 / det ) * (-v12 * pv1 + v11 * pv2 ), T(0), T(1) - a );
93 if ( a <= eps && b <= eps )
95 if ( 1 - a - b <= eps )
108 if ( 1 - a - b <= eps )
Definition MRCameraOrientationPlugin.h:8
float dot(Vector2f a, Vector2f b)
Definition MRMeshFwd.h:94
encodes a point inside a line segment using relative distance in [0,1]
Definition MRSegmPoint.h:14
encodes a point inside a triangle using barycentric coordinates
Definition MRTriPoint.h:16
TriPoint lnext() const
represents the same point relative to next edge in the same triangle
Definition MRTriPoint.h:41
constexpr TriPoint() noexcept
Definition MRTriPoint.h:24
constexpr TriPoint(T a, T b) noexcept
Definition MRTriPoint.h:26
TriPoint(const Vector3< T > &p, const Vector3< T > &v1, const Vector3< T > &v2)
given a point coordinates and triangle (0,v1,v2) computes barycentric coordinates of the point
U interpolate(const U &v0, const U &v1, const U &v2) const
given three values in three vertices, computes interpolated value at this barycentric coordinates
Definition MRTriPoint.h:37
friend std::ostream & operator<<(std::ostream &s, const TriPoint &tp)
Definition MRTriPoint.h:56
constexpr int inVertex() const
returns [0,2] if the point is in a vertex or -1 otherwise
static constexpr auto eps
Definition MRTriPoint.h:22
MR_REQUIRES_IF_SUPPORTED(!std::is_same_v< T, U >) const expr TriPoint(const TriPoint< U > &s)
Definition MRTriPoint.h:27
T b
b in [0,1], b=0 => point is on [v0,v1] edge, b=1 => point is in v2
Definition MRTriPoint.h:20
T a
a in [0,1], a=0 => point is on [v2,v0] edge, a=1 => point is in v1
Definition MRTriPoint.h:19
constexpr int onEdge() const
friend std::istream & operator>>(std::istream &s, TriPoint &tp)
Definition MRTriPoint.h:61
constexpr bool operator==(const TriPoint &rhs) const =default
returns true if two points have equal (a,b) representation
TriPoint(NoInit) noexcept
Definition MRTriPoint.h:25
TriPoint(const Vector3< T > &p, const Vector3< T > &v0, const Vector3< T > &v1, const Vector3< T > &v2)
given a point coordinates and triangle (v0,v1,v2) computes barycentric coordinates of the point
Definition MRTriPoint.h:31
Definition MRMesh/MRVector3.h:30