1namespace muda::distance
4MUDA_GENERIC
void point_point_distance_unclassified(
const Eigen::Vector<T, 3>& p0,
5 const Eigen::Vector<T, 3>& p1,
8 return point_point_distance(p0, p1, dist2);
12MUDA_GENERIC
void point_triangle_distance_unclassified(
const Eigen::Vector<T, 3>& p,
13 const Eigen::Vector<T, 3>& t0,
14 const Eigen::Vector<T, 3>& t1,
15 const Eigen::Vector<T, 3>& t2,
18 switch(point_triangle_distance_type(p, t0, t1, t2))
20 case PointTriangleDistanceType::PP_PT0: {
21 point_point_distance(p, t0, dist2);
25 case PointTriangleDistanceType::PP_PT1: {
26 point_point_distance(p, t1, dist2);
30 case PointTriangleDistanceType::PP_PT2: {
31 point_point_distance(p, t2, dist2);
35 case PointTriangleDistanceType::PE_PT0T1: {
36 point_edge_distance(p, t0, t1, dist2);
40 case PointTriangleDistanceType::PE_PT1T2: {
41 point_edge_distance(p, t1, t2, dist2);
45 case PointTriangleDistanceType::PE_PT2T0: {
46 point_edge_distance(p, t2, t0, dist2);
50 case PointTriangleDistanceType::PT: {
51 point_triangle_distance(p, t0, t1, t2, dist2);
56 MUDA_KERNEL_ERROR_WITH_LOCATION(
"invalid type");
62MUDA_GENERIC
void edge_edge_distance_unclassified(
const Eigen::Vector<T, 3>& ea0,
63 const Eigen::Vector<T, 3>& ea1,
64 const Eigen::Vector<T, 3>& eb0,
65 const Eigen::Vector<T, 3>& eb1,
68 switch(edge_edge_distance_type(ea0, ea1, eb0, eb1))
70 case EdgeEdgeDistanceType::PP_Ea0Eb0: {
71 point_point_distance(ea0, eb0, dist2);
75 case EdgeEdgeDistanceType::PP_Ea0Eb1: {
76 point_point_distance(ea0, eb1, dist2);
80 case EdgeEdgeDistanceType::PE_Ea0Eb0Eb1: {
81 point_edge_distance(ea0, eb0, eb1, dist2);
85 case EdgeEdgeDistanceType::PP_Ea1Eb0: {
86 point_point_distance(ea1, eb0, dist2);
90 case EdgeEdgeDistanceType::PP_Ea1Eb1: {
91 point_point_distance(ea1, eb1, dist2);
95 case EdgeEdgeDistanceType::PE_Ea1Eb0Eb1: {
96 point_edge_distance(ea1, eb0, eb1, dist2);
100 case EdgeEdgeDistanceType::PE_Eb0Ea0Ea1: {
101 point_edge_distance(eb0, ea0, ea1, dist2);
105 case EdgeEdgeDistanceType::PE_Eb1Ea0Ea1: {
106 point_edge_distance(eb1, ea0, ea1, dist2);
110 case EdgeEdgeDistanceType::EE: {
111 edge_edge_distance(ea0, ea1, eb0, eb1, dist2);
116 MUDA_KERNEL_ERROR_WITH_LOCATION(
"invalid type");
123MUDA_GENERIC
void point_edge_distance_unclassified(
const Eigen::Vector<T, 3>& p,
124 const Eigen::Vector<T, 3>& e0,
125 const Eigen::Vector<T, 3>& e1,
128 switch(point_edge_distance_type(p, e0, e1))
130 case PointEdgeDistanceType::PP_PE0: {
131 point_point_distance(p, e0, dist2);
135 case PointEdgeDistanceType::PP_PE1: {
136 point_point_distance(p, e1, dist2);
140 case PointEdgeDistanceType::PE: {
141 point_edge_distance(p, e0, e1, dist2);
145 MUDA_KERNEL_ERROR_WITH_LOCATION(
"invalid type");