30 const Eigen::Vector3<Scalar>& p1,
31 const Eigen::Vector3<Scalar>& p2,
32 const Eigen::Vector3<Scalar>& p3,
37 [[maybe_unused]]
constexpr const Scalar epsilon = 1e-7f;
39 using Vec3 = Eigen::Vector3<Scalar>;
41 const Vec3 q2 = p2 - p1;
42 const Vec3 q3 = p3 - p1;
44 Scalar l2 = q2.squaredNorm();
45 Scalar l3 = q3.squaredNorm();
47 Scalar a12 = -2.0f * q2.dot(q2);
48 Scalar a13 = -2.0f * q3.dot(q2);
49 Scalar a22 = -2.0f * q2.dot(q3);
50 Scalar a23 = -2.0f * q3.dot(q3);
52 Scalar c31 = (a23 * a12 - a22 * a13);
54 if (std::abs(d) < std::numeric_limits<Scalar>::denorm_min()) {
58 return lambda1 * p1 + lambda2 * p2 + lambda3 * p3;
61 lambda1 = s * ((a23 - a22) * l2 + (a12 - a13) * l3 + c31);
62 lambda2 = s * ((-a23) * l2 + (a13)*l3);
63 lambda3 = s * ((a22)*l2 + (-a12) * l3);
90 return lambda1 * p1 + lambda2 * p2 + lambda3 * p3;
nullptr_t, size_t, ptrdiff_t basic_ostream bad_weak_ptr extent, remove_extent, is_array,...
Definition attribute_string_utils.h:21
Eigen::Vector3< Scalar > clipped_triangle_circumcenter(const Eigen::Vector3< Scalar > &p1, const Eigen::Vector3< Scalar > &p2, const Eigen::Vector3< Scalar > &p3, Scalar &lambda1, Scalar &lambda2, Scalar &lambda3)
Compute the circumcenter of a triangle (p1, p2, p3), clipped to the triangle if it lies outside.
Definition clipped_triangle_circumcenter.h:29