MCPcopy Create free account
hub / github.com/TorqueGameEngines/Torque3D / mTriangleDistance

Function mTriangleDistance

Engine/source/math/mathUtils.cpp:524–766  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

522//-----------------------------------------------------------------------------
523
524F32 mTriangleDistance( const Point3F &A, const Point3F &B, const Point3F &C, const Point3F &P, IntersectInfo* info )
525{
526 Point3F diff = A - P;
527 Point3F edge0 = B - A;
528 Point3F edge1 = C - A;
529 F32 a00 = edge0.lenSquared();
530 F32 a01 = mDot( edge0, edge1 );
531 F32 a11 = edge1.lenSquared();
532 F32 b0 = mDot( diff, edge0 );
533 F32 b1 = mDot( diff, edge1 );
534 F32 c = diff.lenSquared();
535 F32 det = mFabs(a00*a11-a01*a01);
536 F32 s = a01*b1-a11*b0;
537 F32 t = a01*b0-a00*b1;
538 F32 sqrDistance;
539
540 if (s + t <= det)
541 {
542 if (s < 0.0f)
543 {
544 if (t < 0.0f) // region 4
545 {
546 if (b0 < 0.0f)
547 {
548 t = 0.0f;
549 if (-b0 >= a00)
550 {
551 s = 1.0f;
552 sqrDistance = a00 + (2.0f)*b0 + c;
553 }
554 else
555 {
556 s = -b0/a00;
557 sqrDistance = b0*s + c;
558 }
559 }
560 else
561 {
562 s = 0.0f;
563 if (b1 >= 0.0f)
564 {
565 t = 0.0f;
566 sqrDistance = c;
567 }
568 else if (-b1 >= a11)
569 {
570 t = 1.0f;
571 sqrDistance = a11 + 2.0f*b1 + c;
572 }
573 else
574 {
575 t = -b1/a11;
576 sqrDistance = b1*t + c;
577 }
578 }
579 }
580 else // region 3
581 {

Callers 2

_makeRenderBatchesMethod · 0.85
softSnapSelectionMethod · 0.85

Calls 3

mFabsFunction · 0.85
mDotFunction · 0.70
lenSquaredMethod · 0.45

Tested by

no test coverage detected