11#ifndef PBAT_GEOMETRY_DISTANCEQUERIES_H
12#define PBAT_GEOMETRY_DISTANCEQUERIES_H
16#include "pbat/HostDevice.h"
43 mini::CMatrix TMatrixL1,
44 mini::CMatrix TMatrixU1,
45 mini::CMatrix TMatrixL2,
46 mini::CMatrix TMatrixU2>
51 TMatrixU2
const& U2) ->
typename TMatrixL1::ScalarType;
63template <mini::CMatrix TMatrixP, mini::CMatrix TMatrixL, mini::CMatrix TMatrixU>
66 typename TMatrixP::ScalarType;
81 mini::CMatrix TMatrixP,
82 mini::CMatrix TMatrixA,
83 mini::CMatrix TMatrixB,
84 mini::CMatrix TMatrixC>
86PointTriangle(TMatrixP
const& P, TMatrixA
const& A, TMatrixB
const& B, TMatrixC
const& C) ->
87 typename TMatrixP::ScalarType;
104 mini::CMatrix TMatrixP,
105 mini::CMatrix TMatrixA,
106 mini::CMatrix TMatrixB,
107 mini::CMatrix TMatrixC,
108 mini::CMatrix TMatrixD>
114 TMatrixD
const& D) ->
typename TMatrixP::ScalarType;
126template <mini::CMatrix TMatrixX, mini::CMatrix TMatrixP, mini::CMatrix TMatrixN>
127PBAT_HOST_DEVICE
auto PointPlane(TMatrixX
const& X, TMatrixP
const& P, TMatrixN
const& n) ->
128 typename TMatrixX::ScalarType;
143 mini::CMatrix TMatrixX,
144 mini::CMatrix TMatrixA,
145 mini::CMatrix TMatrixB,
146 mini::CMatrix TMatrixC>
148PointPlane(TMatrixX
const& X, TMatrixA
const& A, TMatrixB
const& B, TMatrixC
const& C) ->
149 typename TMatrixX::ScalarType;
165 mini::CMatrix TMatrixX,
166 mini::CMatrix TMatrixA,
167 mini::CMatrix TMatrixB,
168 mini::CMatrix TMatrixC>
171 typename TMatrixX::ScalarType R,
174 TMatrixC
const& C) ->
typename TMatrixX::ScalarType;
177 mini::CMatrix TMatrixL1,
178 mini::CMatrix TMatrixU1,
179 mini::CMatrix TMatrixL2,
180 mini::CMatrix TMatrixU2>
185 TMatrixU2
const& U2) ->
typename TMatrixL1::ScalarType
187 using ScalarType =
typename TMatrixL1::ScalarType;
188 auto constexpr kDims = TMatrixL1::kRows;
189 mini::SVector<ScalarType, kDims> LI = Max(L1, L2);
190 mini::SVector<ScalarType, kDims> UI = Min(U1, U2);
192 mini::SVector<ScalarType, kDims> DI = LI - UI;
193 ScalarType d2 = Dot(Cast<ScalarType>(LGU), Squared(DI));
197template <mini::CMatrix TMatrixP, mini::CMatrix TMatrixL, mini::CMatrix TMatrixU>
200 typename TMatrixP::ScalarType
208 return SquaredNorm(P - CP);
212 mini::CMatrix TMatrixP,
213 mini::CMatrix TMatrixA,
214 mini::CMatrix TMatrixB,
215 mini::CMatrix TMatrixC>
217PointTriangle(TMatrixP
const& P, TMatrixA
const& A, TMatrixB
const& B, TMatrixC
const& C) ->
218 typename TMatrixP::ScalarType
221 return SquaredNorm(P - PP);
225 mini::CMatrix TMatrixP,
226 mini::CMatrix TMatrixA,
227 mini::CMatrix TMatrixB,
228 mini::CMatrix TMatrixC,
229 mini::CMatrix TMatrixD>
235 TMatrixD
const& D) ->
typename TMatrixP::ScalarType
238 if (bPointInTetrahedron)
241 using ScalarType =
typename TMatrixP::ScalarType;
242 mini::SVector<ScalarType, 4> sd{
247 ScalarType
const min = Min(sd);
251template <mini::CMatrix TMatrixX, mini::CMatrix TMatrixP, mini::CMatrix TMatrixN>
252PBAT_HOST_DEVICE
auto PointPlane(TMatrixX
const& X, TMatrixP
const& P, TMatrixN
const& n) ->
253 typename TMatrixX::ScalarType
255 return Dot(X - P, n);
259 mini::CMatrix TMatrixX,
260 mini::CMatrix TMatrixA,
261 mini::CMatrix TMatrixB,
262 mini::CMatrix TMatrixC>
264PointPlane(TMatrixX
const& X, TMatrixA
const& A, TMatrixB
const& B, TMatrixC
const& C) ->
265 typename TMatrixX::ScalarType
267 auto const n = Cross(B - A, C - A);
272 mini::CMatrix TMatrixX,
273 mini::CMatrix TMatrixA,
274 mini::CMatrix TMatrixB,
275 mini::CMatrix TMatrixC>
278 typename TMatrixX::ScalarType R,
281 TMatrixC
const& C) ->
typename TMatrixX::ScalarType
This file contains functions to answer closest point queries.
This file includes all the mini linear algebra headers.
This file contains functions to answer overlap queries.
PBAT_HOST_DEVICE auto PointOnAxisAlignedBoundingBox(TMatrixX const &X, TMatrixL const &L, TMatrixU const &U) -> mini::SVector< typename TMatrixX::ScalarType, TMatrixX::kRows >
Obtain the point on the axis-aligned bounding box (AABB) defined by the lower and upper corners close...
Definition ClosestPointQueries.h:280
PBAT_HOST_DEVICE auto PointInTriangle(TMatrixP const &P, TMatrixA const &A, TMatrixB const &B, TMatrixC const &C) -> mini::SVector< typename TMatrixP::ScalarType, TMatrixP::kRows >
Obtain the point on the triangle ABC closest to the point P.
Definition ClosestPointQueries.h:384
This namespace contains functions to answer distance queries.
Definition DistanceQueries.h:26
PBAT_HOST_DEVICE auto AxisAlignedBoundingBoxes(TMatrixL1 const &L1, TMatrixU1 const &U1, TMatrixL2 const &L2, TMatrixU2 const &U2) -> typename TMatrixL1::ScalarType
Obtain squared distance between 2 axis-aligned bounding boxes.
Definition DistanceQueries.h:181
PBAT_HOST_DEVICE auto SphereTriangle(TMatrixX const &X, typename TMatrixX::ScalarType R, TMatrixA const &A, TMatrixB const &B, TMatrixC const &C) -> typename TMatrixX::ScalarType
Obtains the squared distance between sphere (X,R) and triangle ABC.
Definition DistanceQueries.h:276
PBAT_HOST_DEVICE auto PointTetrahedron(TMatrixP const &P, TMatrixA const &A, TMatrixB const &B, TMatrixC const &C, TMatrixD const &D) -> typename TMatrixP::ScalarType
Obtain squared distance between point P and tetrahedron ABCD.
Definition DistanceQueries.h:230
PBAT_HOST_DEVICE auto PointTriangle(TMatrixP const &P, TMatrixA const &A, TMatrixB const &B, TMatrixC const &C) -> typename TMatrixP::ScalarType
Obtain squared distance between point P and triangle ABC.
Definition DistanceQueries.h:217
PBAT_HOST_DEVICE auto PointAxisAlignedBoundingBox(TMatrixP const &P, TMatrixL const &L, TMatrixU const &U) -> typename TMatrixP::ScalarType
Obtain squared distance between point P and axis-aligned box (L,U)
Definition DistanceQueries.h:199
PBAT_HOST_DEVICE auto PointPlane(TMatrixX const &X, TMatrixP const &P, TMatrixN const &n) -> typename TMatrixX::ScalarType
Obtains the signed distance of X w.r.t. plane (P,n)
Definition DistanceQueries.h:252
PBAT_HOST_DEVICE bool PointTetrahedron3D(TMatrixP const &P, TMatrixA const &A, TMatrixB const &B, TMatrixC const &C, TMatrixD const &D)
Checks if point P is contained in tetrahedron ABCD, in at least 3D.
Definition OverlapQueries.h:562
PBAT_HOST_DEVICE bool PointAxisAlignedBoundingBox(TMatrixP const &P, TMatrixL const &L, TMatrixU const &U)
Tests for overlap between point P and axis-aligned bounding box (L,U)
Definition OverlapQueries.h:536
Geometric queries, quantities and data structures.
Definition AabbKdTreeHierarchy.h:23
Mini linear algebra related functionality.
Definition Assign.h:12
The main namespace of the library.
Definition Aliases.h:15