40 U
interpolate(
const U & v0,
const U & v1,
const U & v2 )
const
41 {
return ( 1 -
a -
b ) * v0 +
a * v1 +
b * v2; }
61 return s << tp.
a <<
' ' << tp.
b;
77 const T v11 = dot( v1, v1 );
78 const T v12 = dot( v1, v2 );
79 const T v22 = dot( v2, v2 );
80 const T det = v11 * v22 - v12 * v12;
87 const T pv1 =
dot( p, v1 );
88 const T pv2 =
dot( p, v2 );
89 a = std::clamp( ( 1 / det ) * ( v22 * pv1 - v12 * pv2 ), T(0), T(1) );
90 b = std::clamp( ( 1 / det ) * (-v12 * pv1 + v11 * pv2 ), T(0), T(1) - a );
96 if ( a <= eps && b <= eps )
98 if ( 1 - a - b <= eps )
111 if ( 1 - a - b <= eps )
TriPoint lnext() const
represents the same point relative to next edge in the same triangle
Definition MRTriPoint.h:44
constexpr TriPoint() noexcept
Definition MRTriPoint.h:27
constexpr TriPoint(T a, T b) noexcept
Definition MRTriPoint.h:29
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:40
friend std::ostream & operator<<(std::ostream &s, const TriPoint &tp)
Definition MRTriPoint.h:59
constexpr int inVertex() const
returns [0,2] if the point is in a vertex or -1 otherwise
static constexpr auto eps
Definition MRTriPoint.h:25
MR_REQUIRES_IF_SUPPORTED(!std::is_same_v< T, U >) const expr TriPoint(const TriPoint< U > &s)
The condition is needed for the bindings to not duplicate this ctor against the copy ctor.
Definition MRTriPoint.h:30
T b
b in [0,1], b=0 => point is on [v0,v1] edge, b=1 => point is in v2
Definition MRTriPoint.h:23
T a
a in [0,1], a=0 => point is on [v2,v0] edge, a=1 => point is in v1
Definition MRTriPoint.h:22
constexpr int onEdge() const
friend std::istream & operator>>(std::istream &s, TriPoint &tp)
Definition MRTriPoint.h:64
constexpr bool operator==(const TriPoint &rhs) const =default
returns true if two points have equal (a,b) representation
TriPoint(NoInit) noexcept
Definition MRTriPoint.h:28
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:34
constexpr auto dot(A a, A b)
Definition MRImGuiVectorOperators.h:129
only for bindings generation
Definition MRCameraOrientationPlugin.h:8
encodes a point inside a line segment using relative distance in [0,1]
Definition MRSegmPoint.h:17
encodes a point inside a triangle using barycentric coordinates
Definition MRTriPoint.h:19
Definition MRVector3.h:33