Skip to content

Commit 52fd46a

Browse files
committed
Use geometric predicates from geometry module in xpbd
1 parent e2edd7a commit 52fd46a

File tree

5 files changed

+134
-164
lines changed

5 files changed

+134
-164
lines changed

source/pbat/geometry/ClosestPointQueries.h

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#ifndef PBAT_GEOMETRY_CLOSEST_POINT_QUERIES_H
22
#define PBAT_GEOMETRY_CLOSEST_POINT_QUERIES_H
33

4+
#include "pbat/HostDevice.h"
45
#include "pbat/math/linalg/mini/Mini.h"
56

67
#include <algorithm>
@@ -20,7 +21,7 @@ namespace mini = math::linalg::mini;
2021
* @return
2122
*/
2223
template <mini::CMatrix TMatrixX, mini::CMatrix TMatrixP, mini::CMatrix TMatrixN>
23-
mini::SVector<typename TMatrixX::ScalarType, TMatrixX::kRows>
24+
PBAT_HOST_DEVICE mini::SVector<typename TMatrixX::ScalarType, TMatrixX::kRows>
2425
PointOnPlane(TMatrixX const& X, TMatrixP const& P, TMatrixN const& n);
2526

2627
/**
@@ -31,7 +32,7 @@ PointOnPlane(TMatrixX const& X, TMatrixP const& P, TMatrixN const& n);
3132
* @return
3233
*/
3334
template <mini::CMatrix TMatrixX, mini::CMatrix TMatrixP, mini::CMatrix TMatrixQ>
34-
mini::SVector<typename TMatrixX::ScalarType, TMatrixX::kRows>
35+
PBAT_HOST_DEVICE mini::SVector<typename TMatrixX::ScalarType, TMatrixX::kRows>
3536
PointOnLineSegment(TMatrixX const& X, TMatrixP const& P, TMatrixQ const& Q);
3637

3738
/**
@@ -43,7 +44,7 @@ PointOnLineSegment(TMatrixX const& X, TMatrixP const& P, TMatrixQ const& Q);
4344
* @return
4445
*/
4546
template <mini::CMatrix TMatrixX, mini::CMatrix TMatrixL, mini::CMatrix TMatrixU>
46-
mini::SVector<typename TMatrixX::ScalarType, TMatrixX::kRows>
47+
PBAT_HOST_DEVICE mini::SVector<typename TMatrixX::ScalarType, TMatrixX::kRows>
4748
PointOnAxisAlignedBoundingBox(TMatrixX const& X, TMatrixL const& L, TMatrixU const& U);
4849

4950
/**
@@ -59,7 +60,7 @@ template <
5960
mini::CMatrix TMatrixA,
6061
mini::CMatrix TMatrixB,
6162
mini::CMatrix TMatrixC>
62-
mini::SVector<typename TMatrixP::ScalarType, 3>
63+
PBAT_HOST_DEVICE mini::SVector<typename TMatrixP::ScalarType, 3>
6364
UvwPointInTriangle(TMatrixP const& P, TMatrixA const& A, TMatrixB const& B, TMatrixC const& C);
6465

6566
/**
@@ -75,7 +76,7 @@ template <
7576
mini::CMatrix TMatrixA,
7677
mini::CMatrix TMatrixB,
7778
mini::CMatrix TMatrixC>
78-
mini::SVector<typename TMatrixP::ScalarType, TMatrixP::kRows>
79+
PBAT_HOST_DEVICE mini::SVector<typename TMatrixP::ScalarType, TMatrixP::kRows>
7980
PointInTriangle(TMatrixP const& P, TMatrixA const& A, TMatrixB const& B, TMatrixC const& C);
8081

8182
/**
@@ -95,15 +96,15 @@ template <
9596
mini::CMatrix TMatrixB,
9697
mini::CMatrix TMatrixC,
9798
mini::CMatrix TMatrixD>
98-
mini::SVector<typename TMatrixP::ScalarType, TMatrixP::kRows> PointInTetrahedron(
99+
PBAT_HOST_DEVICE mini::SVector<typename TMatrixP::ScalarType, TMatrixP::kRows> PointInTetrahedron(
99100
TMatrixP const& P,
100101
TMatrixA const& A,
101102
TMatrixB const& B,
102103
TMatrixC const& C,
103104
TMatrixD const& D);
104105

105106
template <mini::CMatrix TMatrixX, mini::CMatrix TMatrixP, mini::CMatrix TMatrixN>
106-
mini::SVector<typename TMatrixX::ScalarType, TMatrixX::kRows>
107+
PBAT_HOST_DEVICE mini::SVector<typename TMatrixX::ScalarType, TMatrixX::kRows>
107108
PointOnPlane(TMatrixX const& X, TMatrixP const& P, TMatrixN const& n)
108109
{
109110
using namespace std;
@@ -121,7 +122,7 @@ PointOnPlane(TMatrixX const& X, TMatrixP const& P, TMatrixN const& n)
121122
}
122123

123124
template <mini::CMatrix TMatrixX, mini::CMatrix TMatrixP, mini::CMatrix TMatrixQ>
124-
mini::SVector<typename TMatrixX::ScalarType, TMatrixX::kRows>
125+
PBAT_HOST_DEVICE mini::SVector<typename TMatrixX::ScalarType, TMatrixX::kRows>
125126
PointOnLineSegment(TMatrixX const& X, TMatrixP const& P, TMatrixQ const& Q)
126127
{
127128
using ScalarType = typename TMatrixX::ScalarType;
@@ -140,7 +141,7 @@ PointOnLineSegment(TMatrixX const& X, TMatrixP const& P, TMatrixQ const& Q)
140141
}
141142

142143
template <mini::CMatrix TMatrixX, mini::CMatrix TMatrixL, mini::CMatrix TMatrixU>
143-
mini::SVector<typename TMatrixX::ScalarType, TMatrixX::kRows>
144+
PBAT_HOST_DEVICE mini::SVector<typename TMatrixX::ScalarType, TMatrixX::kRows>
144145
PointOnAxisAlignedBoundingBox(TMatrixX const& P, TMatrixL const& L, TMatrixU const& U)
145146
{
146147
using namespace std;
@@ -158,7 +159,7 @@ template <
158159
mini::CMatrix TMatrixA,
159160
mini::CMatrix TMatrixB,
160161
mini::CMatrix TMatrixC>
161-
mini::SVector<typename TMatrixP::ScalarType, 3>
162+
PBAT_HOST_DEVICE mini::SVector<typename TMatrixP::ScalarType, 3>
162163
UvwPointInTriangle(TMatrixP const& P, TMatrixA const& A, TMatrixB const& B, TMatrixC const& C)
163164
{
164165
using ScalarType = typename TMatrixP::ScalarType;
@@ -242,7 +243,7 @@ template <
242243
mini::CMatrix TMatrixA,
243244
mini::CMatrix TMatrixB,
244245
mini::CMatrix TMatrixC>
245-
mini::SVector<typename TMatrixP::ScalarType, TMatrixP::kRows>
246+
PBAT_HOST_DEVICE mini::SVector<typename TMatrixP::ScalarType, TMatrixP::kRows>
246247
PointInTriangle(TMatrixP const& P, TMatrixA const& A, TMatrixB const& B, TMatrixC const& C)
247248
{
248249
auto uvw = UvwPointInTriangle(P, A, B, C);
@@ -255,7 +256,7 @@ template <
255256
mini::CMatrix TMatrixB,
256257
mini::CMatrix TMatrixC,
257258
mini::CMatrix TMatrixD>
258-
mini::SVector<typename TMatrixP::ScalarType, TMatrixP::kRows> PointInTetrahedron(
259+
PBAT_HOST_DEVICE mini::SVector<typename TMatrixP::ScalarType, TMatrixP::kRows> PointInTetrahedron(
259260
TMatrixP const& P,
260261
TMatrixA const& A,
261262
TMatrixB const& B,

source/pbat/geometry/DistanceQueries.h

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
#include "ClosestPointQueries.h"
55
#include "OverlapQueries.h"
6+
#include "pbat/HostDevice.h"
67
#include "pbat/math/linalg/mini/Mini.h"
78

89
#include <algorithm>
@@ -26,7 +27,7 @@ template <
2627
mini::CMatrix TMatrixU1,
2728
mini::CMatrix TMatrixL2,
2829
mini::CMatrix TMatrixU2>
29-
typename TMatrixL1::ScalarType AxisAlignedBoundingBoxes(
30+
PBAT_HOST_DEVICE typename TMatrixL1::ScalarType AxisAlignedBoundingBoxes(
3031
TMatrixL1 const& L1,
3132
TMatrixU1 const& U1,
3233
TMatrixL2 const& L2,
@@ -43,7 +44,7 @@ typename TMatrixL1::ScalarType AxisAlignedBoundingBoxes(
4344
* @return
4445
*/
4546
template <mini::CMatrix TMatrixP, mini::CMatrix TMatrixL, mini::CMatrix TMatrixU>
46-
typename TMatrixP::ScalarType
47+
PBAT_HOST_DEVICE typename TMatrixP::ScalarType
4748
PointAxisAlignedBoundingBox(TMatrixP const& P, TMatrixL const& L, TMatrixU const& U);
4849

4950
/**
@@ -59,7 +60,7 @@ template <
5960
mini::CMatrix TMatrixA,
6061
mini::CMatrix TMatrixB,
6162
mini::CMatrix TMatrixC>
62-
typename TMatrixP::ScalarType
63+
PBAT_HOST_DEVICE typename TMatrixP::ScalarType
6364
PointTriangle(TMatrixP const& P, TMatrixA const& A, TMatrixB const& B, TMatrixC const& C);
6465

6566
/**
@@ -82,7 +83,7 @@ template <
8283
mini::CMatrix TMatrixB,
8384
mini::CMatrix TMatrixC,
8485
mini::CMatrix TMatrixD>
85-
typename TMatrixP::ScalarType PointTetrahedron(
86+
PBAT_HOST_DEVICE typename TMatrixP::ScalarType PointTetrahedron(
8687
TMatrixP const& P,
8788
TMatrixA const& A,
8889
TMatrixB const& B,
@@ -97,7 +98,8 @@ typename TMatrixP::ScalarType PointTetrahedron(
9798
* @return
9899
*/
99100
template <mini::CMatrix TMatrixX, mini::CMatrix TMatrixP, mini::CMatrix TMatrixN>
100-
typename TMatrixX::ScalarType PointPlane(TMatrixX const& X, TMatrixP const& P, TMatrixN const& n);
101+
PBAT_HOST_DEVICE typename TMatrixX::ScalarType
102+
PointPlane(TMatrixX const& X, TMatrixP const& P, TMatrixN const& n);
101103

102104
/**
103105
* @brief Obtains the distance between sphere (X,R) and triangle ABC.
@@ -113,7 +115,7 @@ template <
113115
mini::CMatrix TMatrixA,
114116
mini::CMatrix TMatrixB,
115117
mini::CMatrix TMatrixC>
116-
typename TMatrixX::ScalarType SphereTriangle(
118+
PBAT_HOST_DEVICE typename TMatrixX::ScalarType SphereTriangle(
117119
TMatrixX const& X,
118120
typename TMatrixX::ScalarType R,
119121
TMatrixA const& A,
@@ -125,7 +127,7 @@ template <
125127
mini::CMatrix TMatrixU1,
126128
mini::CMatrix TMatrixL2,
127129
mini::CMatrix TMatrixU2>
128-
typename TMatrixL1::ScalarType AxisAlignedBoundingBoxes(
130+
PBAT_HOST_DEVICE typename TMatrixL1::ScalarType AxisAlignedBoundingBoxes(
129131
TMatrixL1 const& L1,
130132
TMatrixU1 const& U1,
131133
TMatrixL2 const& L2,
@@ -142,7 +144,7 @@ typename TMatrixL1::ScalarType AxisAlignedBoundingBoxes(
142144
}
143145

144146
template <mini::CMatrix TMatrixP, mini::CMatrix TMatrixL, mini::CMatrix TMatrixU>
145-
typename TMatrixP::ScalarType
147+
PBAT_HOST_DEVICE typename TMatrixP::ScalarType
146148
PointAxisAlignedBoundingBox(TMatrixP const& P, TMatrixL const& L, TMatrixU const& U)
147149
{
148150
// If point is inside AABB, then distance is 0.
@@ -159,7 +161,7 @@ template <
159161
mini::CMatrix TMatrixA,
160162
mini::CMatrix TMatrixB,
161163
mini::CMatrix TMatrixC>
162-
typename TMatrixP::ScalarType
164+
PBAT_HOST_DEVICE typename TMatrixP::ScalarType
163165
PointTriangle(TMatrixP const& P, TMatrixA const& A, TMatrixB const& B, TMatrixC const& C)
164166
{
165167
auto const PP = ClosestPointQueries::PointInTriangle(P, A, B, C);
@@ -172,7 +174,7 @@ template <
172174
mini::CMatrix TMatrixB,
173175
mini::CMatrix TMatrixC,
174176
mini::CMatrix TMatrixD>
175-
typename TMatrixP::ScalarType PointTetrahedron(
177+
PBAT_HOST_DEVICE typename TMatrixP::ScalarType PointTetrahedron(
176178
TMatrixP const& P,
177179
TMatrixA const& A,
178180
TMatrixB const& B,
@@ -194,7 +196,8 @@ typename TMatrixP::ScalarType PointTetrahedron(
194196
}
195197

196198
template <mini::CMatrix TMatrixX, mini::CMatrix TMatrixP, mini::CMatrix TMatrixN>
197-
typename TMatrixX::ScalarType PointPlane(TMatrixX const& X, TMatrixP const& P, TMatrixN const& n)
199+
PBAT_HOST_DEVICE typename TMatrixX::ScalarType
200+
PointPlane(TMatrixX const& X, TMatrixP const& P, TMatrixN const& n)
198201
{
199202
return Dot(X - P, n);
200203
}
@@ -204,7 +207,7 @@ template <
204207
mini::CMatrix TMatrixA,
205208
mini::CMatrix TMatrixB,
206209
mini::CMatrix TMatrixC>
207-
typename TMatrixX::ScalarType SphereTriangle(
210+
PBAT_HOST_DEVICE typename TMatrixX::ScalarType SphereTriangle(
208211
TMatrixX const& X,
209212
typename TMatrixX::ScalarType R,
210213
TMatrixA const& A,

0 commit comments

Comments
 (0)