MUDA
Loading...
Searching...
No Matches
point_triangle.inl
1#include <Eigen/Geometry>
2
3namespace muda::distance
4{
5namespace details
6{
7 template <class T>
8 MUDA_GENERIC void g_PT(
9 T v01, T v02, T v03, T v11, T v12, T v13, T v21, T v22, T v23, T v31, T v32, T v33, T g[12])
10 {
11 T t11;
12 T t12;
13 T t13;
14 T t14;
15 T t15;
16 T t16;
17 T t17;
18 T t18;
19 T t19;
20 T t20;
21 T t21;
22 T t22;
23 T t32;
24 T t33;
25 T t34;
26 T t43;
27 T t45;
28 T t44;
29 T t46;
30
31 /* G_PT */
32 /* G = G_PT(V01,V02,V03,V11,V12,V13,V21,V22,V23,V31,V32,V33) */
33 /* This function was generated by the Symbolic Math Toolbox version 8.3. */
34 /* 10-Jun-2019 17:42:16 */
35 t11 = -v11 + v01;
36 t12 = -v12 + v02;
37 t13 = -v13 + v03;
38 t14 = -v21 + v11;
39 t15 = -v22 + v12;
40 t16 = -v23 + v13;
41 t17 = -v31 + v11;
42 t18 = -v32 + v12;
43 t19 = -v33 + v13;
44 t20 = -v31 + v21;
45 t21 = -v32 + v22;
46 t22 = -v33 + v23;
47 t32 = t14 * t18 + -(t15 * t17);
48 t33 = t14 * t19 + -(t16 * t17);
49 t34 = t15 * t19 + -(t16 * t18);
50 t43 = 1.0 / ((t32 * t32 + t33 * t33) + t34 * t34);
51 t45 = (t13 * t32 + t11 * t34) + -(t12 * t33);
52 t44 = t43 * t43;
53 t46 = t45 * t45;
54 g[0] = t34 * t43 * t45 * 2.0;
55 g[1] = t33 * t43 * t45 * -2.0;
56 g[2] = t32 * t43 * t45 * 2.0;
57 t45 *= t43;
58 g[3] = -t44 * t46 * (t21 * t32 * 2.0 + t22 * t33 * 2.0)
59 - t45 * ((t34 + t12 * t22) - t13 * t21) * 2.0;
60 t43 = t44 * t46;
61 g[4] = t43 * (t20 * t32 * 2.0 - t22 * t34 * 2.0)
62 + t45 * ((t33 + t11 * t22) - t13 * t20) * 2.0;
63 g[5] = t43 * (t20 * t33 * 2.0 + t21 * t34 * 2.0)
64 - t45 * ((t32 + t11 * t21) - t12 * t20) * 2.0;
65 g[6] = t45 * (t12 * t19 - t13 * t18) * 2.0
66 + t43 * (t18 * t32 * 2.0 + t19 * t33 * 2.0);
67 g[7] = t45 * (t11 * t19 - t13 * t17) * -2.0
68 - t43 * (t17 * t32 * 2.0 - t19 * t34 * 2.0);
69 g[8] = t45 * (t11 * t18 - t12 * t17) * 2.0
70 - t43 * (t17 * t33 * 2.0 + t18 * t34 * 2.0);
71 g[9] = t45 * (t12 * t16 - t13 * t15) * -2.0
72 - t43 * (t15 * t32 * 2.0 + t16 * t33 * 2.0);
73 g[10] = t45 * (t11 * t16 - t13 * t14) * 2.0
74 + t43 * (t14 * t32 * 2.0 - t16 * t34 * 2.0);
75 g[11] = t45 * (t11 * t15 - t12 * t14) * -2.0
76 + t43 * (t14 * t33 * 2.0 + t15 * t34 * 2.0);
77 }
78
79 template <class T>
80 MUDA_GENERIC void H_PT(
81 T v01, T v02, T v03, T v11, T v12, T v13, T v21, T v22, T v23, T v31, T v32, T v33, T H[144])
82 {
83 T t11;
84 T t12;
85 T t13;
86 T t18;
87 T t20;
88 T t22;
89 T t23;
90 T t24;
91 T t25;
92 T t26;
93 T t27;
94 T t28;
95 T t65;
96 T t66;
97 T t67;
98 T t68;
99 T t69;
100 T t70;
101 T t71;
102 T t77;
103 T t85;
104 T t86;
105 T t90;
106 T t94;
107 T t95;
108 T t99;
109 T t103;
110 T t38;
111 T t39;
112 T t40;
113 T t41;
114 T t42;
115 T t43;
116 T t44;
117 T t45;
118 T t46;
119 T t72;
120 T t73;
121 T t75;
122 T t78;
123 T t80;
124 T t82;
125 T t125;
126 T t126;
127 T t127;
128 T t128;
129 T t129;
130 T t130;
131 T t131;
132 T t133;
133 T t135;
134 T t149;
135 T t150;
136 T t151;
137 T t189;
138 T t190;
139 T t191;
140 T t192;
141 T t193;
142 T t194;
143 T t195;
144 T t196;
145 T t197;
146 T t198;
147 T t199;
148 T t200;
149 T t202;
150 T t205;
151 T t203;
152 T t204;
153 T t206;
154 T t241;
155 T t309;
156 T t310;
157 T t312;
158 T t313;
159 T t314;
160 T t315;
161 T t316;
162 T t317;
163 T t318;
164 T t319;
165 T t321;
166 T t322;
167 T t323;
168 T t324;
169 T t325;
170 T t261;
171 T t262;
172 T t599;
173 T t600;
174 T t602;
175 T t605;
176 T t609;
177 T t610;
178 T t611;
179 T t613;
180 T t615;
181 T t616;
182 T t621;
183 T t622;
184 T t623;
185 T t625;
186 T t645;
187 T t646_tmp;
188 T t646;
189 T t601;
190 T t603;
191 T t604;
192 T t606;
193 T t607;
194 T t608;
195 T t612;
196 T t614;
197 T t617;
198 T t618;
199 T t619;
200 T t620;
201 T t624;
202 T t626;
203 T t627;
204 T t628;
205 T t629;
206 T t630;
207 T t631;
208 T t632;
209 T t633;
210 T t634;
211 T t635;
212 T t636;
213 T t637;
214 T t638;
215
216 /* H_PT */
217 /* H = H_PT(V01,V02,V03,V11,V12,V13,V21,V22,V23,V31,V32,V33) */
218 /* This function was generated by the Symbolic Math Toolbox version 8.3. */
219 /* 10-Jun-2019 17:42:25 */
220 t11 = -v11 + v01;
221 t12 = -v12 + v02;
222 t13 = -v13 + v03;
223 t18 = -v21 + v11;
224 t20 = -v22 + v12;
225 t22 = -v23 + v13;
226 t23 = -v31 + v11;
227 t24 = -v32 + v12;
228 t25 = -v33 + v13;
229 t26 = -v31 + v21;
230 t27 = -v32 + v22;
231 t28 = -v33 + v23;
232 t65 = t18 * t24;
233 t66 = t20 * t23;
234 t67 = t18 * t25;
235 t68 = t22 * t23;
236 t69 = t20 * t25;
237 t70 = t22 * t24;
238 t71 = t18 * t23 * 2.0;
239 t77 = t20 * t24 * 2.0;
240 t85 = t22 * t25 * 2.0;
241 t86 = t18 * t26 * 2.0;
242 t90 = t20 * t27 * 2.0;
243 t94 = t22 * t28 * 2.0;
244 t95 = t23 * t26 * 2.0;
245 t99 = t24 * t27 * 2.0;
246 t103 = t25 * t28 * 2.0;
247 t38 = t18 * t18 * 2.0;
248 t39 = t20 * t20 * 2.0;
249 t40 = t22 * t22 * 2.0;
250 t41 = t23 * t23 * 2.0;
251 t42 = t24 * t24 * 2.0;
252 t43 = t25 * t25 * 2.0;
253 t44 = t26 * t26 * 2.0;
254 t45 = t27 * t27 * 2.0;
255 t46 = t28 * t28 * 2.0;
256 t72 = t65 * 2.0;
257 t73 = t66 * 2.0;
258 t75 = t67 * 2.0;
259 t78 = t68 * 2.0;
260 t80 = t69 * 2.0;
261 t82 = t70 * 2.0;
262 t125 = t11 * t20 + -(t12 * t18);
263 t126 = t11 * t22 + -(t13 * t18);
264 t127 = t12 * t22 + -(t13 * t20);
265 t128 = t11 * t24 + -(t12 * t23);
266 t129 = t11 * t25 + -(t13 * t23);
267 t130 = t12 * t25 + -(t13 * t24);
268 t131 = t65 + -t66;
269 t133 = t67 + -t68;
270 t135 = t69 + -t70;
271 t149 = t131 * t131;
272 t150 = t133 * t133;
273 t151 = t135 * t135;
274 t189 = (t11 * t27 + -(t12 * t26)) + t131;
275 t190 = (t11 * t28 + -(t13 * t26)) + t133;
276 t191 = (t12 * t28 + -(t13 * t27)) + t135;
277 t192 = t20 * t131 * 2.0 + t22 * t133 * 2.0;
278 t193 = t18 * t133 * 2.0 + t20 * t135 * 2.0;
279 t194 = t24 * t131 * 2.0 + t25 * t133 * 2.0;
280 t195 = t23 * t133 * 2.0 + t24 * t135 * 2.0;
281 t196 = t27 * t131 * 2.0 + t28 * t133 * 2.0;
282 t197 = t26 * t133 * 2.0 + t27 * t135 * 2.0;
283 t198 = t18 * t131 * 2.0 + -(t22 * t135 * 2.0);
284 t199 = t23 * t131 * 2.0 + -(t25 * t135 * 2.0);
285 t200 = t26 * t131 * 2.0 + -(t28 * t135 * 2.0);
286 t202 = 1.0 / ((t149 + t150) + t151);
287 t205 = (t13 * t131 + t11 * t135) + -(t12 * t133);
288 t203 = t202 * t202;
289 t204 = pow(t202, 3.0);
290 t206 = t205 * t205;
291 t241 = t131 * t135 * t202 * 2.0;
292 t309 = t11 * t202 * t205 * 2.0;
293 t310 = t12 * t202 * t205 * 2.0;
294 t13 = t13 * t202 * t205 * 2.0;
295 t312 = (-v21 + v01) * t202 * t205 * 2.0;
296 t313 = (-v22 + v02) * t202 * t205 * 2.0;
297 t314 = (-v23 + v03) * t202 * t205 * 2.0;
298 t315 = (-v31 + v01) * t202 * t205 * 2.0;
299 t316 = t18 * t202 * t205 * 2.0;
300 t317 = (-v32 + v02) * t202 * t205 * 2.0;
301 t318 = t20 * t202 * t205 * 2.0;
302 t319 = (-v33 + v03) * t202 * t205 * 2.0;
303 t11 = t22 * t202 * t205 * 2.0;
304 t321 = t23 * t202 * t205 * 2.0;
305 t322 = t24 * t202 * t205 * 2.0;
306 t323 = t25 * t202 * t205 * 2.0;
307 t324 = t26 * t202 * t205 * 2.0;
308 t325 = t27 * t202 * t205 * 2.0;
309 t12 = t28 * t202 * t205 * 2.0;
310 t261 = -(t131 * t133 * t202 * 2.0);
311 t262 = -(t133 * t135 * t202 * 2.0);
312 t599 = t130 * t135 * t202 * 2.0 + t135 * t194 * t203 * t205 * 2.0;
313 t600 = -(t125 * t131 * t202 * 2.0) + t131 * t193 * t203 * t205 * 2.0;
314 t602 = t129 * t133 * t202 * 2.0 + t133 * t199 * t203 * t205 * 2.0;
315 t605 = -(t131 * t189 * t202 * 2.0) + t131 * t197 * t203 * t205 * 2.0;
316 t609 = (t127 * t133 * t202 * 2.0 + -t11) + t133 * t192 * t203 * t205 * 2.0;
317 t610 = (t126 * t135 * t202 * 2.0 + t11) + t135 * t198 * t203 * t205 * 2.0;
318 t611 = (t130 * t131 * t202 * 2.0 + -t322) + t131 * t194 * t203 * t205 * 2.0;
319 t613 = (t126 * t131 * t202 * 2.0 + -t316) + t131 * t198 * t203 * t205 * 2.0;
320 t615 = (-(t125 * t135 * t202 * 2.0) + -t318) + t135 * t193 * t203 * t205 * 2.0;
321 t616 = (-(t128 * t133 * t202 * 2.0) + -t321) + t133 * t195 * t203 * t205 * 2.0;
322 t621 = (t133 * t191 * t202 * 2.0 + -t12) + t133 * t196 * t203 * t205 * 2.0;
323 t622 = (t135 * t190 * t202 * 2.0 + t12) + t135 * t200 * t203 * t205 * 2.0;
324 t623 = (t131 * t190 * t202 * 2.0 + -t324) + t131 * t200 * t203 * t205 * 2.0;
325 t625 = (-(t135 * t189 * t202 * 2.0) + -t325) + t135 * t197 * t203 * t205 * 2.0;
326 t645 = ((((t127 * t129 * t202 * 2.0 + -t13) + (t72 + -(t66 * 4.0)) * t203 * t206)
327 + t129 * t192 * t203 * t205 * 2.0)
328 + t127 * t199 * t203 * t205 * 2.0)
329 + t192 * t199 * t204 * t206 * 2.0;
330 t646_tmp = t203 * t206;
331 t646 = ((((t126 * t130 * t202 * 2.0 + t13) + t646_tmp * (t73 - t65 * 4.0))
332 + t126 * t194 * t203 * t205 * 2.0)
333 + t130 * t198 * t203 * t205 * 2.0)
334 + t194 * t198 * t204 * t206 * 2.0;
335 t601 = t128 * t131 * t202 * 2.0 + -(t131 * t195 * t203 * t205 * 2.0);
336 t603 = -(t127 * t135 * t202 * 2.0) + -(t135 * t192 * t203 * t205 * 2.0);
337 t604 = -(t126 * t133 * t202 * 2.0) + -(t133 * t198 * t203 * t205 * 2.0);
338 t606 = -(t135 * t191 * t202 * 2.0) + -(t135 * t196 * t203 * t205 * 2.0);
339 t607 = -(t133 * t190 * t202 * 2.0) + -(t133 * t200 * t203 * t205 * 2.0);
340 t608 = (t125 * t133 * t202 * 2.0 + t316) + -(t133 * t193 * t203 * t205 * 2.0);
341 t612 = (t128 * t135 * t202 * 2.0 + t322) + -(t135 * t195 * t203 * t205 * 2.0);
342 t614 = (-(t127 * t131 * t202 * 2.0) + t318) + -(t131 * t192 * t203 * t205 * 2.0);
343 t617 = (-(t130 * t133 * t202 * 2.0) + t323) + -(t133 * t194 * t203 * t205 * 2.0);
344 t618 = (-(t129 * t131 * t202 * 2.0) + t321) + -(t131 * t199 * t203 * t205 * 2.0);
345 t619 = (-(t129 * t135 * t202 * 2.0) + -t323) + -(t135 * t199 * t203 * t205 * 2.0);
346 t620 = (t133 * t189 * t202 * 2.0 + t324) + -(t133 * t197 * t203 * t205 * 2.0);
347 t624 = (-(t131 * t191 * t202 * 2.0) + t325) + -(t131 * t196 * t203 * t205 * 2.0);
348 t626 = (((t125 * t127 * t202 * 2.0 + t18 * t22 * t203 * t206 * 2.0)
349 + t125 * t192 * t203 * t205 * 2.0)
350 + -(t127 * t193 * t203 * t205 * 2.0))
351 + -(t192 * t193 * t204 * t206 * 2.0);
352 t627 = (((t128 * t130 * t202 * 2.0 + t23 * t25 * t203 * t206 * 2.0)
353 + t128 * t194 * t203 * t205 * 2.0)
354 + -(t130 * t195 * t203 * t205 * 2.0))
355 + -(t194 * t195 * t204 * t206 * 2.0);
356 t628 = (((-(t125 * t126 * t202 * 2.0) + t20 * t22 * t203 * t206 * 2.0)
357 + t126 * t193 * t203 * t205 * 2.0)
358 + -(t125 * t198 * t203 * t205 * 2.0))
359 + t193 * t198 * t204 * t206 * 2.0;
360 t629 = (((-(t128 * t129 * t202 * 2.0) + t24 * t25 * t203 * t206 * 2.0)
361 + t129 * t195 * t203 * t205 * 2.0)
362 + -(t128 * t199 * t203 * t205 * 2.0))
363 + t195 * t199 * t204 * t206 * 2.0;
364 t630 = (((-(t126 * t127 * t202 * 2.0) + t18 * t20 * t203 * t206 * 2.0)
365 + -(t126 * t192 * t203 * t205 * 2.0))
366 + -(t127 * t198 * t203 * t205 * 2.0))
367 + -(t192 * t198 * t204 * t206 * 2.0);
368 t631 = (((-(t129 * t130 * t202 * 2.0) + t23 * t24 * t203 * t206 * 2.0)
369 + -(t129 * t194 * t203 * t205 * 2.0))
370 + -(t130 * t199 * t203 * t205 * 2.0))
371 + -(t194 * t199 * t204 * t206 * 2.0);
372 t632 = (((-(t125 * t128 * t202 * 2.0) + (t71 + t77) * t203 * t206)
373 + t128 * t193 * t203 * t205 * 2.0)
374 + t125 * t195 * t203 * t205 * 2.0)
375 + -(t193 * t195 * t204 * t206 * 2.0);
376 t633 = (((-(t127 * t130 * t202 * 2.0) + (t77 + t85) * t203 * t206)
377 + -(t130 * t192 * t203 * t205 * 2.0))
378 + -(t127 * t194 * t203 * t205 * 2.0))
379 + -(t192 * t194 * t204 * t206 * 2.0);
380 t634 = (((-(t126 * t129 * t202 * 2.0) + (t71 + t85) * t203 * t206)
381 + -(t129 * t198 * t203 * t205 * 2.0))
382 + -(t126 * t199 * t203 * t205 * 2.0))
383 + -(t198 * t199 * t204 * t206 * 2.0);
384 t635 = (((t127 * t191 * t202 * 2.0 + -((t90 + t94) * t203 * t206))
385 + t127 * t196 * t203 * t205 * 2.0)
386 + t191 * t192 * t203 * t205 * 2.0)
387 + t192 * t196 * t204 * t206 * 2.0;
388 t636 = (((-(t128 * t189 * t202 * 2.0) + (t95 + t99) * t203 * t206)
389 + t128 * t197 * t203 * t205 * 2.0)
390 + t189 * t195 * t203 * t205 * 2.0)
391 + -(t195 * t197 * t204 * t206 * 2.0);
392 t637 = (((t125 * t189 * t202 * 2.0 + -((t86 + t90) * t203 * t206))
393 + -(t125 * t197 * t203 * t205 * 2.0))
394 + -(t189 * t193 * t203 * t205 * 2.0))
395 + t193 * t197 * t204 * t206 * 2.0;
396 t638 = (((-(t130 * t191 * t202 * 2.0) + (t99 + t103) * t203 * t206)
397 + -(t130 * t196 * t203 * t205 * 2.0))
398 + -(t191 * t194 * t203 * t205 * 2.0))
399 + -(t194 * t196 * t204 * t206 * 2.0);
400 t86 = (((t126 * t190 * t202 * 2.0 + -((t86 + t94) * t203 * t206))
401 + t126 * t200 * t203 * t205 * 2.0)
402 + t190 * t198 * t203 * t205 * 2.0)
403 + t198 * t200 * t204 * t206 * 2.0;
404 t71 = (((-(t129 * t190 * t202 * 2.0) + (t95 + t103) * t203 * t206)
405 + -(t129 * t200 * t203 * t205 * 2.0))
406 + -(t190 * t199 * t203 * t205 * 2.0))
407 + -(t199 * t200 * t204 * t206 * 2.0);
408 t85 = (((t189 * t191 * t202 * 2.0 + t26 * t28 * t203 * t206 * 2.0)
409 + t189 * t196 * t203 * t205 * 2.0)
410 + -(t191 * t197 * t203 * t205 * 2.0))
411 + -(t196 * t197 * t204 * t206 * 2.0);
412 t90 = (((-(t189 * t190 * t202 * 2.0) + t27 * t28 * t203 * t206 * 2.0)
413 + t190 * t197 * t203 * t205 * 2.0)
414 + -(t189 * t200 * t203 * t205 * 2.0))
415 + t197 * t200 * t204 * t206 * 2.0;
416 t99 = (((-(t190 * t191 * t202 * 2.0) + t26 * t27 * t203 * t206 * 2.0)
417 + -(t190 * t196 * t203 * t205 * 2.0))
418 + -(t191 * t200 * t203 * t205 * 2.0))
419 + -(t196 * t200 * t204 * t206 * 2.0);
420 t77 = ((((-(t127 * t128 * t202 * 2.0) + t310) + (t75 + -(t68 * 4.0)) * t203 * t206)
421 + t127 * t195 * t203 * t205 * 2.0)
422 + -(t128 * t192 * t203 * t205 * 2.0))
423 + t192 * t195 * t204 * t206 * 2.0;
424 t131 = ((((t126 * t128 * t202 * 2.0 + -t309) + (t80 + -(t70 * 4.0)) * t203 * t206)
425 + t128 * t198 * t203 * t205 * 2.0)
426 + -(t126 * t195 * t203 * t205 * 2.0))
427 + -(t195 * t198 * t204 * t206 * 2.0);
428 t133 = ((((-(t125 * t130 * t202 * 2.0) + -t310) + t646_tmp * (t78 - t67 * 4.0))
429 + t130 * t193 * t203 * t205 * 2.0)
430 + -(t125 * t194 * t203 * t205 * 2.0))
431 + t193 * t194 * t204 * t206 * 2.0;
432 t325 = ((((t125 * t129 * t202 * 2.0 + t309) + t646_tmp * (t82 - t69 * 4.0))
433 + t125 * t199 * t203 * t205 * 2.0)
434 + -(t129 * t193 * t203 * t205 * 2.0))
435 + -(t193 * t199 * t204 * t206 * 2.0);
436 t135 = ((((t125 * t191 * t202 * 2.0 + t313) + ((t75 + t18 * t28 * 2.0) + -t78) * t203 * t206)
437 + t125 * t196 * t203 * t205 * 2.0)
438 + -(t191 * t193 * t203 * t205 * 2.0))
439 + -(t193 * t196 * t204 * t206 * 2.0);
440 t324 = ((((t127 * t189 * t202 * 2.0 + -t313) + ((t78 + t22 * t26 * 2.0) + -t75) * t203 * t206)
441 + -(t127 * t197 * t203 * t205 * 2.0))
442 + t189 * t192 * t203 * t205 * 2.0)
443 + -(t192 * t197 * t204 * t206 * 2.0);
444 t318 = ((((-(t126 * t189 * t202 * 2.0) + t312)
445 + ((t82 + t22 * t27 * 2.0) + -t80) * t203 * t206)
446 + t126 * t197 * t203 * t205 * 2.0)
447 + -(t189 * t198 * t203 * t205 * 2.0))
448 + t197 * t198 * t204 * t206 * 2.0;
449 t321 = ((((-(t130 * t189 * t202 * 2.0) + t317)
450 + -(((t78 + t25 * t26 * 2.0) + -t75) * t203 * t206))
451 + t130 * t197 * t203 * t205 * 2.0)
452 + -(t189 * t194 * t203 * t205 * 2.0))
453 + t194 * t197 * t204 * t206 * 2.0;
454 t323 = ((((t129 * t191 * t202 * 2.0 + t319)
455 + -(((t72 + t23 * t27 * 2.0) + -t73) * t203 * t206))
456 + t129 * t196 * t203 * t205 * 2.0)
457 + t191 * t199 * t203 * t205 * 2.0)
458 + t196 * t199 * t204 * t206 * 2.0;
459 t322 = ((((-(t125 * t190 * t202 * 2.0) + -t312)
460 + ((t80 + t20 * t28 * 2.0) + -t82) * t203 * t206)
461 + -(t125 * t200 * t203 * t205 * 2.0))
462 + t190 * t193 * t203 * t205 * 2.0)
463 + t193 * t200 * t204 * t206 * 2.0;
464 t316 = ((((t130 * t190 * t202 * 2.0 + -t319)
465 + -(((t73 + t24 * t26 * 2.0) + -t72) * t203 * t206))
466 + t130 * t200 * t203 * t205 * 2.0)
467 + t190 * t194 * t203 * t205 * 2.0)
468 + t194 * t200 * t204 * t206 * 2.0;
469 t65 = ((((-(t128 * t191 * t202 * 2.0) + -t317)
470 + -(((t75 + t23 * t28 * 2.0) + -t78) * t203 * t206))
471 + -(t128 * t196 * t203 * t205 * 2.0))
472 + t191 * t195 * t203 * t205 * 2.0)
473 + t195 * t196 * t204 * t206 * 2.0;
474 t66 = ((((-(t127 * t190 * t202 * 2.0) + t314) + ((t73 + t20 * t26 * 2.0) + -t72) * t203 * t206)
475 + -(t127 * t200 * t203 * t205 * 2.0))
476 + -(t190 * t192 * t203 * t205 * 2.0))
477 + -(t192 * t200 * t204 * t206 * 2.0);
478 t13 = ((((t128 * t190 * t202 * 2.0 + t315)
479 + -(((t80 + t24 * t28 * 2.0) + -t82) * t203 * t206))
480 + t128 * t200 * t203 * t205 * 2.0)
481 + -(t190 * t195 * t203 * t205 * 2.0))
482 + -(t195 * t200 * t204 * t206 * 2.0);
483 t12 = ((((-(t126 * t191 * t202 * 2.0) + -t314)
484 + ((t72 + t18 * t27 * 2.0) + -t73) * t203 * t206)
485 + -(t126 * t196 * t203 * t205 * 2.0))
486 + -(t191 * t198 * t203 * t205 * 2.0))
487 + -(t196 * t198 * t204 * t206 * 2.0);
488 t11 = ((((t129 * t189 * t202 * 2.0 + -t315)
489 + -(((t82 + t25 * t27 * 2.0) + -t80) * t203 * t206))
490 + -(t129 * t197 * t203 * t205 * 2.0))
491 + t189 * t199 * t203 * t205 * 2.0)
492 + -(t197 * t199 * t204 * t206 * 2.0);
493 H[0] = t151 * t202 * 2.0;
494 H[1] = t262;
495 H[2] = t241;
496 H[3] = t606;
497 H[4] = t622;
498 H[5] = t625;
499 H[6] = t599;
500 H[7] = t619;
501 H[8] = t612;
502 H[9] = t603;
503 H[10] = t610;
504 H[11] = t615;
505 H[12] = t262;
506 H[13] = t150 * t202 * 2.0;
507 H[14] = t261;
508 H[15] = t621;
509 H[16] = t607;
510 H[17] = t620;
511 H[18] = t617;
512 H[19] = t602;
513 H[20] = t616;
514 H[21] = t609;
515 H[22] = t604;
516 H[23] = t608;
517 H[24] = t241;
518 H[25] = t261;
519 H[26] = t149 * t202 * 2.0;
520 H[27] = t624;
521 H[28] = t623;
522 H[29] = t605;
523 H[30] = t611;
524 H[31] = t618;
525 H[32] = t601;
526 H[33] = t614;
527 H[34] = t613;
528 H[35] = t600;
529 H[36] = t606;
530 H[37] = t621;
531 H[38] = t624;
532 H[39] = ((t191 * t191 * t202 * 2.0 + t196 * t196 * t204 * t206 * 2.0)
533 - t646_tmp * (t45 + t46))
534 + t191 * t196 * t203 * t205 * 4.0;
535 H[40] = t99;
536 H[41] = t85;
537 H[42] = t638;
538 H[43] = t323;
539 H[44] = t65;
540 H[45] = t635;
541 H[46] = t12;
542 H[47] = t135;
543 H[48] = t622;
544 H[49] = t607;
545 H[50] = t623;
546 H[51] = t99;
547 H[52] = ((t190 * t190 * t202 * 2.0 + t200 * t200 * t204 * t206 * 2.0)
548 - t646_tmp * (t44 + t46))
549 + t190 * t200 * t203 * t205 * 4.0;
550 H[53] = t90;
551 H[54] = t316;
552 H[55] = t71;
553 H[56] = t13;
554 H[57] = t66;
555 H[58] = t86;
556 H[59] = t322;
557 H[60] = t625;
558 H[61] = t620;
559 H[62] = t605;
560 H[63] = t85;
561 H[64] = t90;
562 H[65] = ((t189 * t189 * t202 * 2.0 + t197 * t197 * t204 * t206 * 2.0)
563 - t646_tmp * (t44 + t45))
564 - t189 * t197 * t203 * t205 * 4.0;
565 H[66] = t321;
566 H[67] = t11;
567 H[68] = t636;
568 H[69] = t324;
569 H[70] = t318;
570 H[71] = t637;
571 H[72] = t599;
572 H[73] = t617;
573 H[74] = t611;
574 H[75] = t638;
575 H[76] = t316;
576 H[77] = t321;
577 H[78] = ((t130 * t130 * t202 * 2.0 + t194 * t194 * t204 * t206 * 2.0)
578 - t646_tmp * (t42 + t43))
579 + t130 * t194 * t203 * t205 * 4.0;
580 H[79] = t631;
581 H[80] = t627;
582 H[81] = t633;
583 H[82] = t646;
584 H[83] = t133;
585 H[84] = t619;
586 H[85] = t602;
587 H[86] = t618;
588 H[87] = t323;
589 H[88] = t71;
590 H[89] = t11;
591 H[90] = t631;
592 H[91] = ((t129 * t129 * t202 * 2.0 + t199 * t199 * t204 * t206 * 2.0)
593 - t646_tmp * (t41 + t43))
594 + t129 * t199 * t203 * t205 * 4.0;
595 H[92] = t629;
596 H[93] = t645;
597 H[94] = t634;
598 H[95] = t325;
599 H[96] = t612;
600 H[97] = t616;
601 H[98] = t601;
602 H[99] = t65;
603 H[100] = t13;
604 H[101] = t636;
605 H[102] = t627;
606 H[103] = t629;
607 H[104] = ((t128 * t128 * t202 * 2.0 + t195 * t195 * t204 * t206 * 2.0)
608 - t646_tmp * (t41 + t42))
609 - t128 * t195 * t203 * t205 * 4.0;
610 H[105] = t77;
611 H[106] = t131;
612 H[107] = t632;
613 H[108] = t603;
614 H[109] = t609;
615 H[110] = t614;
616 H[111] = t635;
617 H[112] = t66;
618 H[113] = t324;
619 H[114] = t633;
620 H[115] = t645;
621 H[116] = t77;
622 H[117] = ((t127 * t127 * t202 * 2.0 + t192 * t192 * t204 * t206 * 2.0)
623 - t646_tmp * (t39 + t40))
624 + t127 * t192 * t203 * t205 * 4.0;
625 H[118] = t630;
626 H[119] = t626;
627 H[120] = t610;
628 H[121] = t604;
629 H[122] = t613;
630 H[123] = t12;
631 H[124] = t86;
632 H[125] = t318;
633 H[126] = t646;
634 H[127] = t634;
635 H[128] = t131;
636 H[129] = t630;
637 H[130] = ((t126 * t126 * t202 * 2.0 + t198 * t198 * t204 * t206 * 2.0)
638 - t646_tmp * (t38 + t40))
639 + t126 * t198 * t203 * t205 * 4.0;
640 H[131] = t628;
641 H[132] = t615;
642 H[133] = t608;
643 H[134] = t600;
644 H[135] = t135;
645 H[136] = t322;
646 H[137] = t637;
647 H[138] = t133;
648 H[139] = t325;
649 H[140] = t632;
650 H[141] = t626;
651 H[142] = t628;
652 H[143] = ((t125 * t125 * t202 * 2.0 + t193 * t193 * t204 * t206 * 2.0)
653 - t646_tmp * (t38 + t39))
654 - t125 * t193 * t203 * t205 * 4.0;
655 }
656} // namespace details
657
658template <class T>
659MUDA_GENERIC void point_triangle_distance(const Eigen::Vector<T, 3>& p,
660 const Eigen::Vector<T, 3>& t0,
661 const Eigen::Vector<T, 3>& t1,
662 const Eigen::Vector<T, 3>& t2,
663 T& dist2)
664{
665 const Eigen::Vector<T, 3> b = (t1 - t0).cross(t2 - t0);
666 T aTb = (p - t0).dot(b);
667 dist2 = aTb * aTb / b.squaredNorm();
668}
669
670template <class T>
671MUDA_GENERIC void point_triangle_distance_gradient(const Eigen::Vector<T, 3>& p,
672 const Eigen::Vector<T, 3>& t0,
673 const Eigen::Vector<T, 3>& t1,
674 const Eigen::Vector<T, 3>& t2,
675 Eigen::Vector<T, 12>& grad)
676{
677 details::g_PT(
678 p[0], p[1], p[2], t0[0], t0[1], t0[2], t1[0], t1[1], t1[2], t2[0], t2[1], t2[2], grad.data());
679}
680
681template <class T>
682MUDA_GENERIC void point_triangle_distance_hessian(const Eigen::Vector<T, 3>& p,
683 const Eigen::Vector<T, 3>& t0,
684 const Eigen::Vector<T, 3>& t1,
685 const Eigen::Vector<T, 3>& t2,
686 Eigen::Matrix<T, 12, 12>& Hessian)
687{
688 details::H_PT(p[0],
689 p[1],
690 p[2],
691 t0[0],
692 t0[1],
693 t0[2],
694 t1[0],
695 t1[1],
696 t1[2],
697 t2[0],
698 t2[1],
699 t2[2],
700 Hessian.data());
701}
702
703} // namespace muda::distance