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

Function mTriangleDistance

Engine/source/math/mathUtils.cpp:511–753  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

509//-----------------------------------------------------------------------------
510
511F32 mTriangleDistance( const Point3F &A, const Point3F &B, const Point3F &C, const Point3F &P, IntersectInfo* info )
512{
513 Point3F diff = A - P;
514 Point3F edge0 = B - A;
515 Point3F edge1 = C - A;
516 F32 a00 = edge0.lenSquared();
517 F32 a01 = mDot( edge0, edge1 );
518 F32 a11 = edge1.lenSquared();
519 F32 b0 = mDot( diff, edge0 );
520 F32 b1 = mDot( diff, edge1 );
521 F32 c = diff.lenSquared();
522 F32 det = mFabs(a00*a11-a01*a01);
523 F32 s = a01*b1-a11*b0;
524 F32 t = a01*b0-a00*b1;
525 F32 sqrDistance;
526
527 if (s + t <= det)
528 {
529 if (s < 0.0f)
530 {
531 if (t < 0.0f) // region 4
532 {
533 if (b0 < 0.0f)
534 {
535 t = 0.0f;
536 if (-b0 >= a00)
537 {
538 s = 1.0f;
539 sqrDistance = a00 + (2.0f)*b0 + c;
540 }
541 else
542 {
543 s = -b0/a00;
544 sqrDistance = b0*s + c;
545 }
546 }
547 else
548 {
549 s = 0.0f;
550 if (b1 >= 0.0f)
551 {
552 t = 0.0f;
553 sqrDistance = c;
554 }
555 else if (-b1 >= a11)
556 {
557 t = 1.0f;
558 sqrDistance = a11 + 2.0f*b1 + c;
559 }
560 else
561 {
562 t = -b1/a11;
563 sqrDistance = b1*t + c;
564 }
565 }
566 }
567 else // region 3
568 {

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