UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
DistTriangle3Triangle3.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3// Port of geometry3Sharp DistTriangle3Triangle3
4// which was ported from WildMagic 5
5
6
7#pragma once
8
9#include "VectorTypes.h"
10#include "TriangleTypes.h"
11#include "SegmentTypes.h"
13#include "DistPoint3Triangle3.h"
14
15namespace UE
16{
17namespace Geometry
18{
19
20using namespace UE::Math;
21
25template <typename Real>
27{
28public:
29 // Output
30 Real DistanceSquared = -1.0;
33
34
39 {
40 Triangle[0] = TriangleA;
41 Triangle[1] = TriangleB;
42 }
43
45 {
47 Triangle[WhichTriangle] = TriangleIn;
48 DistanceSquared = -1.0; // clear cached result
49 }
50
51 Real Get()
52 {
54 }
56 {
57 return ComputeResult();
58 }
59
61 {
62 if (DistanceSquared >= 0)
63 {
64 return DistanceSquared;
65 }
66
67
68 // Compare edges of Triangle[0] to the interior of Triangle[1].
70 Real ratio;
71 int i0, i1;
72 for (i0 = 2, i1 = 0; i1 < 3; i0 = i1++)
73 {
74 TSegment3<Real> edge(Triangle[0].V[i0], Triangle[0].V[i1]);
75
76 TDistSegment3Triangle3<Real> queryST(edge, Triangle[1]);
77 sqrDistTmp = queryST.GetSquared();
78 if (sqrDistTmp < sqrDist)
79 {
80 TriangleClosest[0] = queryST.SegmentClosest;
81 TriangleClosest[1] = queryST.TriangleClosest;
83
84 ratio = queryST.SegmentParameter / edge.Extent;
85 TriangleBaryCoords[0][i0] = (0.5) * (1 - ratio);
87 TriangleBaryCoords[0][3 - i0 - i1] = 0;
88 TriangleBaryCoords[1] = queryST.TriangleBaryCoords;
89
91 {
93 return 0;
94 }
95 }
96 }
97
98 // Compare edges of Triangle[1] to the interior of Triangle[0].
99 for (i0 = 2, i1 = 0; i1 < 3; i0 = i1++)
100 {
101 TSegment3<Real> edge(Triangle[1].V[i0], Triangle[1].V[i1]);
102
103 TDistSegment3Triangle3<Real> queryST(edge, Triangle[0]);
104 sqrDistTmp = queryST.GetSquared();
105 if (sqrDistTmp < sqrDist)
106 {
107 TriangleClosest[0] = queryST.SegmentClosest;
108 TriangleClosest[1] = queryST.TriangleClosest;
110
111 ratio = queryST.SegmentParameter / edge.Extent;
112 TriangleBaryCoords[1][i0] = (0.5) * (1 - ratio);
114 TriangleBaryCoords[1][3 - i0 - i1] = 0;
115 TriangleBaryCoords[0] = queryST.TriangleBaryCoords;
116
118 {
119 DistanceSquared = 0;
120 return 0;
121 }
122 }
123 }
124
125
127 return DistanceSquared;
128 }
129
130private:
131
132 // Input triangles; must be set via SetTriangle to clear cached result
133 TTriangle3<Real> Triangle[2];
134};
135
138
139} // end namespace UE::Geometry
140} // end namespace UE
#define check(expr)
Definition AssertionMacros.h:314
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
Definition MathUtil.h:150
static RealType Sqrt(const RealType Value)
Definition MathUtil.h:342
Definition DistSegment3Triangle3.h:26
Definition DistTriangle3Triangle3.h:27
Real ComputeResult()
Definition DistTriangle3Triangle3.h:60
Real DistanceSquared
Definition DistTriangle3Triangle3.h:30
Real GetSquared()
Definition DistTriangle3Triangle3.h:55
TVector< Real > TriangleBaryCoords[2]
Definition DistTriangle3Triangle3.h:32
void SetTriangle(int WhichTriangle, const TTriangle3< Real > &TriangleIn)
Definition DistTriangle3Triangle3.h:44
TDistTriangle3Triangle3()
Definition DistTriangle3Triangle3.h:35
TVector< Real > TriangleClosest[2]
Definition DistTriangle3Triangle3.h:31
TDistTriangle3Triangle3(const TTriangle3< Real > &TriangleA, const TTriangle3< Real > &TriangleB)
Definition DistTriangle3Triangle3.h:38
Real Get()
Definition DistTriangle3Triangle3.h:51
TDistTriangle3Triangle3< double > FDistTriangle3Triangle3d
Definition DistTriangle3Triangle3.h:137
TDistTriangle3Triangle3< float > FDistTriangle3Triangle3f
Definition DistTriangle3Triangle3.h:136
Definition Sphere.cpp:10
Definition AdvancedWidgetsModule.cpp:13
Definition SegmentTypes.h:447
T Extent
Definition SegmentTypes.h:454
Definition TriangleTypes.h:263
Definition Vector.h:51