Loading...
Searching...
No Matches
CG.hpp
1/*---------------------------------------------------------------------------*\
2 *
3 * bitpit
4 *
5 * Copyright (C) 2015-2021 OPTIMAD engineering Srl
6 *
7 * -------------------------------------------------------------------------
8 * License
9 * This file is part of bitpit.
10 *
11 * bitpit is free software: you can redistribute it and/or modify it
12 * under the terms of the GNU Lesser General Public License v3 (LGPL)
13 * as published by the Free Software Foundation.
14 *
15 * bitpit is distributed in the hope that it will be useful, but WITHOUT
16 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
17 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
18 * License for more details.
19 *
20 * You should have received a copy of the GNU Lesser General Public License
21 * along with bitpit. If not, see <http://www.gnu.org/licenses/>.
22 *
23\*---------------------------------------------------------------------------*/
24
25# ifndef __BITPIT_CG_BASE_HPP__
26# define __BITPIT_CG_BASE_HPP__
27
28// Standard Template Library
29# include <array>
30# include <vector>
31
32// bitpit library
33# include "bitpit_common.hpp"
34
35namespace bitpit{
36
37
38namespace CGElem{
39
40typedef std::array<double,3> array3D ;
41
46
47const double DEFAULT_DISTANCE_TOLERANCE = 1.e-12;
48const double DEFAULT_COPLANARITY_TOLERANCE = 1.e-12;
49
53const std::array< std::array<int,2>,12> boxEdgeVertexConnectivity =
54{{
55 std::array<int,2>{ {0,2} },
56 std::array<int,2>{ {1,3} },
57 std::array<int,2>{ {0,1} },
58 std::array<int,2>{ {2,3} },
59 std::array<int,2>{ {4,6} },
60 std::array<int,2>{ {5,7} },
61 std::array<int,2>{ {4,5} },
62 std::array<int,2>{ {6,7} },
63 std::array<int,2>{ {0,4} },
64 std::array<int,2>{ {1,5} },
65 std::array<int,2>{ {2,6} },
66 std::array<int,2>{ {3,7} }
67
68}};
69
73const std::array< std::array<int,4>, 6> boxFaceVertexConnectivity =
74{{
75 std::array<int,4>{ {0,2,6,4} },
76 std::array<int,4>{ {1,3,7,5} },
77 std::array<int,4>{ {0,4,5,1} },
78 std::array<int,4>{ {2,6,7,3} },
79 std::array<int,4>{ {0,1,3,2} },
80 std::array<int,4>{ {4,5,7,6} }
81}};
82
86
87bool validSegment( array3D const &, array3D const & );
88bool validLine( array3D const &, array3D const & );
89bool validPlane( array3D const &, array3D const & );
90bool validTriangle( array3D const &, array3D const &, array3D const & );
91bool validBarycentric( double const * , int );
92
93int convertBarycentricToFlagSegment( std::array<double,2> const &, double tolerance = DEFAULT_DISTANCE_TOLERANCE);
94int convertBarycentricToFlagSegment( const double *lambda, double tolerance = DEFAULT_DISTANCE_TOLERANCE);
95int convertBarycentricToFlagTriangle( std::array<double,3> const &, double tolerance = DEFAULT_DISTANCE_TOLERANCE);
96int convertBarycentricToFlagTriangle( const double *lambda, double tolerance = DEFAULT_DISTANCE_TOLERANCE);
97int convertBarycentricToFlagPolygon( std::vector<double> const &, double tolerance = DEFAULT_DISTANCE_TOLERANCE);
98int convertBarycentricToFlagPolygon( std::size_t, double const *, double tolerance = DEFAULT_DISTANCE_TOLERANCE);
99
100void computeGeneralizedBarycentric( array3D const &, std::vector<array3D> const &, std::vector<double> &);
101void computeGeneralizedBarycentric( array3D const &, std::size_t, array3D const *, std::vector<double> &);
102void computeGeneralizedBarycentric( array3D const &, std::size_t, array3D const *, double *);
103
104array3D reconstructPointFromBarycentricSegment( array3D const &, array3D const &, std::array<double,2> const & );
105array3D reconstructPointFromBarycentricSegment( array3D const &, array3D const &, double const * );
106array3D reconstructPointFromBarycentricTriangle( array3D const &, array3D const &, array3D const &, std::array<double,3> const & );
107array3D reconstructPointFromBarycentricTriangle( array3D const &, array3D const &, array3D const &, double const * );
108array3D reconstructPointFromBarycentricPolygon( std::vector<array3D> const &, std::vector<double> const & );
109array3D reconstructPointFromBarycentricPolygon( std::size_t, array3D const *, std::vector<double> const & );
110array3D reconstructPointFromBarycentricPolygon( std::size_t, array3D const *, double const * );
111
112array3D rotatePoint( const array3D &P, const array3D &n0, const array3D &n1, double angle );
113
114array3D projectPointLine( array3D const &, array3D const &, array3D const & );
115array3D projectPointPlane( array3D const &, array3D const &, array3D const & );
116array3D projectPointSegment( array3D const &, array3D const &, array3D const & );
117array3D projectPointSegment( array3D const &, array3D const &, array3D const &, std::array<double,2> & );
118array3D projectPointSegment( array3D const &, array3D const &, array3D const &, double* );
119array3D projectPointTriangle( array3D const &, array3D const &, array3D const &, array3D const & );
120array3D projectPointTriangle( array3D const &, array3D const &, array3D const &, array3D const &, array3D & );
121array3D projectPointTriangle( array3D const &P, array3D const &Q0, array3D const &Q1, array3D const &Q2, double *lambda );
122array3D projectPointPolygon( array3D const &, std::vector<array3D> const & );
123array3D projectPointPolygon( array3D const &, std::size_t, array3D const * );
124array3D projectPointPolygon( array3D const &, std::vector<array3D> const &, std::vector<double> & );
125array3D projectPointPolygon( array3D const &, std::size_t, array3D const *, std::vector<double> & );
126array3D projectPointPolygon( array3D const &, std::size_t, array3D const *, double * );
127array3D projectPointCone( array3D const &, array3D const &, array3D const &, double );
128std::vector<array3D> projectCloudTriangle( std::vector<array3D> const &, array3D const &, array3D const &, array3D const &, std::vector<array3D> &);
129
130array3D restrictPointTriangle( array3D const &, array3D const &, array3D const &, array3D &);
131array3D restrictPointTriangle( array3D const &, array3D const &, array3D const &, double *);
132
133double distancePointLine( array3D const &, array3D const &, array3D const &, array3D & ) ;
134double distancePointPlane( array3D const &, array3D const &, array3D const &, array3D & ) ;
135
136double distancePointSegment( array3D const &, array3D const &, array3D const & );
137double distancePointSegment( array3D const &, array3D const &, array3D const &, std::array<double,2> & );
138
139double distancePointTriangle( array3D const &, array3D const &, array3D const &, array3D const &);
140double distancePointTriangle( array3D const &, array3D const &, array3D const &, array3D const &, array3D &);
141
142double distancePointPolygon( array3D const &, std::vector<array3D> const &, array3D &, int & );
143double distancePointPolygon( array3D const &, std::size_t, array3D const *, array3D &, int & );
144double distancePointPolygon( array3D const &, std::vector<array3D> const & );
145double distancePointPolygon( array3D const &, std::size_t, array3D const * );
146double distancePointPolygon( array3D const &, std::vector<array3D> const &, std::vector<double> & );
147double distancePointPolygon( array3D const &, std::size_t, array3D const *, std::vector<double> & );
148double distancePointPolygon( array3D const &, std::size_t, array3D const *, double * );
149
150double distancePointCone( array3D const &, array3D const &, array3D const &, double );
151
152std::vector<double> distanceCloudTriangle( std::vector<array3D> const &, array3D const &, array3D const &, array3D const &);
153std::vector<double> distanceCloudTriangle( std::vector<array3D> const &, array3D const &, array3D const &, array3D const &, std::vector<array3D> & );
154
155std::vector<double> distanceCloudPolygon( std::vector<array3D> const &, std::vector<array3D> const &, std::vector<array3D> &, std::vector<int> & );
156std::vector<double> distanceCloudPolygon( std::vector<array3D> const &, std::size_t, array3D const *, std::vector<array3D> &, std::vector<int> & );
157std::vector<double> distanceCloudPolygon( std::vector<array3D> const &, std::vector<array3D> const &);
158std::vector<double> distanceCloudPolygon( std::vector<array3D> const &, std::size_t, array3D const *);
159std::vector<double> distanceCloudPolygon( std::vector<array3D> const &, std::vector<array3D> const &, std::vector<std::vector<double>> &);
160std::vector<double> distanceCloudPolygon( std::vector<array3D> const &, std::size_t, array3D const *, std::vector<std::vector<double>> &);
161
162double distanceLineLine(array3D const &, array3D const &, array3D const &, array3D const &);
163double distanceLineLine(array3D const &, array3D const &, array3D const &, array3D const &, array3D &, array3D &);
164
165
166bool intersectPointLine( array3D const &, array3D const &, array3D const &,
167 const double distanceTolerance = DEFAULT_DISTANCE_TOLERANCE) ;
168bool intersectPointSegment( array3D const &, array3D const &, array3D const &,
169 const double distanceTolerance = DEFAULT_DISTANCE_TOLERANCE) ;
170bool intersectPointTriangle( array3D const &, array3D const &, array3D const &, array3D const &,
171 const double distanceTolerance = DEFAULT_DISTANCE_TOLERANCE) ;
172bool intersectPointBox( array3D const &, array3D const &, array3D const &, int dim=3,
173 const double distanceTolerance = DEFAULT_DISTANCE_TOLERANCE) ;
174
175bool intersectLineLine( array3D const &, array3D const &, array3D const &, array3D const &, array3D &,
176 const double distanceTolerance = DEFAULT_DISTANCE_TOLERANCE) ;
177bool intersectLinePlane( array3D const &, array3D const &, array3D const &, array3D const &, array3D &,
178 const double coplanarityTolerance = DEFAULT_COPLANARITY_TOLERANCE) ;
179bool intersectLineTriangle( array3D const &, array3D const &, array3D const &, array3D const &, array3D const &,
180 array3D &, const double distanceTolerance = DEFAULT_DISTANCE_TOLERANCE) ;
181bool intersectLinePolygon( array3D const &, array3D const &, std::vector<array3D> const &, array3D &,
182 const double distanceTolerance = DEFAULT_DISTANCE_TOLERANCE) ;
183bool intersectLinePolygon( array3D const &, array3D const &, std::size_t, array3D const *, array3D &,
184 const double distanceTolerance = DEFAULT_DISTANCE_TOLERANCE) ;
185
186bool intersectSegmentSegment( array3D const &, array3D const &, array3D const &, array3D const &, array3D &,
187 const double distanceTolerance = DEFAULT_DISTANCE_TOLERANCE) ;
188bool intersectSegmentPlane( array3D const &, array3D const &, array3D const &, array3D const &, array3D &,
189 const double distanceTolerance = DEFAULT_DISTANCE_TOLERANCE) ;
190bool intersectSegmentTriangle( array3D const &, array3D const &, array3D const &, array3D const &, array3D const &,
191 array3D &, const double distanceTolerance = DEFAULT_DISTANCE_TOLERANCE) ;
192bool intersectSegmentPolygon( array3D const &, array3D const &, std::vector<array3D> const &, array3D &,
193 const double distanceTolerance = DEFAULT_DISTANCE_TOLERANCE) ;
194bool intersectSegmentPolygon( array3D const &, array3D const &, std::size_t, array3D const *, array3D &,
195 const double distanceTolerance = DEFAULT_DISTANCE_TOLERANCE) ;
196
197bool intersectSegmentBox( array3D const &, array3D const &, array3D const &, array3D const &, int dim = 3,
198 const double distanceTolerance = DEFAULT_DISTANCE_TOLERANCE) ;
199bool intersectSegmentBox( array3D const &, array3D const &, array3D const &, array3D const &, bool, bool,
200 std::vector<array3D> &, int dim=3, const double distanceTolerance = DEFAULT_DISTANCE_TOLERANCE);
201bool intersectSegmentBox( array3D const &, array3D const &, array3D const &, array3D const &, bool, bool,
202 std::vector<array3D> &, std::vector<int> &, int dim=3, const double distanceTolerance = DEFAULT_DISTANCE_TOLERANCE);
203
204bool intersectPlanePixel(array3D const &Pp, array3D const &nP, array3D const *V, std::array<array3D, 2> &intersection,
205 std::array<int, 2> &edges_of_intersection, const double distanceTolerance = DEFAULT_COPLANARITY_TOLERANCE);
206bool intersectPlanePixel(array3D const &Pp, array3D const &nP, array3D const *V,
207 std::array<array3D, 2> &intersection, const double distanceTolerance = DEFAULT_COPLANARITY_TOLERANCE);
208bool intersectPlanePixel(array3D const &Pp, array3D const &nP, array3D const *V,
209 std::array<array3D, 2> &intersection, std::vector<array3D> &poly, const double distanceTolerance = DEFAULT_COPLANARITY_TOLERANCE);
210bool intersectPlaneTriangle(array3D const &P0, array3D const &P1, array3D const &P2, array3D const &Pp, array3D const &nP, std::array<array3D, 2> &intersection,
211 std::array<int, 2> &edges_of_intersection, const double distanceTolerance = DEFAULT_COPLANARITY_TOLERANCE);
212bool intersectPlaneTriangle(array3D const &P0, array3D const &P1, array3D const &P2, array3D const &Pp, array3D const &nP, std::array<array3D, 2> &intersection,
213 const double distanceTolerance = DEFAULT_COPLANARITY_TOLERANCE);
214bool intersectPlaneTriangle(array3D const &P0, array3D const &P1, array3D const &P2, array3D const &Pp, array3D const &nP,
215 std::array<array3D, 2> &intersection, std::vector<array3D> &poly, const double distanceTolerance = DEFAULT_COPLANARITY_TOLERANCE);
216bool intersectPlanePolygon(array3D const &P, array3D const &nP, std::size_t nV, array3D const *V, std::vector<std::array<array3D, 2>> &Qs,
217 std::vector<std::array<int, 2>> &edges_of_Qs, const double distanceTolerance = DEFAULT_COPLANARITY_TOLERANCE);
218bool intersectPlanePolygon(array3D const &P, array3D const &nP, std::size_t nV, array3D const *V,
219 std::vector<std::array<array3D, 2>> &Qs, const double distanceTolerance = DEFAULT_COPLANARITY_TOLERANCE);
220bool intersectPlanePolygon(array3D const &P, array3D const &nP, std::size_t nV, array3D const *V,
221 std::vector<std::array<array3D, 2>> &Qs, std::vector< std::vector<array3D> > &polys, const double distanceTolerance = DEFAULT_DISTANCE_TOLERANCE);
222array3D computePolygonNormal(std::size_t nV, const array3D *V);
223void reconstructPlaneIntersectedPolygons(std::size_t nV, array3D const *V, std::vector<std::array<array3D, 2>> const &Qs,
224 std::vector<std::array<int, 2>> const &edges_of_Qs,
225 std::vector< std::vector<array3D> > &polys, const double distanceTolerance = DEFAULT_DISTANCE_TOLERANCE);
226
227bool intersectPlanePlane( array3D const &, array3D const &, array3D const &, array3D const &,
228 array3D &, array3D &, const double coplanarityTolerance = DEFAULT_COPLANARITY_TOLERANCE) ;
229bool intersectPlaneBox( array3D const &, array3D const &, array3D const &, array3D const &, int dim=3,
230 const double distanceTolerance = DEFAULT_DISTANCE_TOLERANCE);
231bool intersectPlaneBox( array3D const &, array3D const &, array3D const &, array3D const &,
232 std::vector<array3D> &, int dim=3, const double distanceTolerance = DEFAULT_DISTANCE_TOLERANCE);
233
234bool intersectBoxBox( array3D const &, array3D const &, array3D const &, array3D const &, int dim = 3,
235 const double distanceTolerance = DEFAULT_DISTANCE_TOLERANCE) ;
236bool intersectBoxBox( array3D const &, array3D const &, array3D const &, array3D const &,
237 array3D &, array3D &, int dim = 3, const double distanceTolerance = DEFAULT_DISTANCE_TOLERANCE) ;
238
239bool intersectBoxTriangle( array3D const &, array3D const &, array3D const &, array3D const &, array3D const &,
240 int dim=3, const double distanceTolerance = DEFAULT_DISTANCE_TOLERANCE) ;
241bool intersectBoxTriangle( array3D const &, array3D const &, array3D const &, array3D const &, array3D const &,
242 bool, bool, bool, std::vector<array3D> &, int dim=3, const double distanceTolerance = DEFAULT_DISTANCE_TOLERANCE) ;
243bool intersectBoxTriangle( array3D const &, array3D const &, array3D const &, array3D const &, array3D const &,
244 bool, bool, bool, std::vector<array3D> &, std::vector<int> &, int dim=3,
245 const double distanceTolerance = DEFAULT_DISTANCE_TOLERANCE) ;
246
247
248bool intersectBoxPolygon( array3D const &, array3D const &, std::vector<array3D> const &, int dim=3,
249 const double distanceTolerance = DEFAULT_DISTANCE_TOLERANCE);
250bool intersectBoxPolygon( array3D const &, array3D const &, std::size_t, array3D const *, int dim=3,
251 const double distanceTolerance = DEFAULT_DISTANCE_TOLERANCE);
252bool intersectBoxPolygon( array3D const &, array3D const &, std::vector<array3D> const &, bool, bool, bool,
253 std::vector<array3D> &, int dim=3, const double distanceTolerance = DEFAULT_DISTANCE_TOLERANCE);
254bool intersectBoxPolygon( array3D const &, array3D const &, std::size_t, array3D const *, bool, bool, bool,
255 std::vector<array3D> &, int dim=3, const double distanceTolerance = DEFAULT_DISTANCE_TOLERANCE);
256bool intersectBoxPolygon( array3D const &, array3D const &, std::vector<array3D> const &, bool, bool, bool,
257 std::vector<array3D> &, std::vector<int> &, int dim=3, const double distanceTolerance = DEFAULT_DISTANCE_TOLERANCE);
258bool intersectBoxPolygon( array3D const &, array3D const &, std::size_t, array3D const *, bool, bool, bool,
259 std::vector<array3D> &, std::vector<int> &, int dim=3, const double distanceTolerance = DEFAULT_DISTANCE_TOLERANCE);
260
261bool intersectBoxCircle( array3D const &A0, array3D const &A1, array3D const &centre, double radius, const double distanceTolerance = DEFAULT_DISTANCE_TOLERANCE);
262
263bool intersectBoxSphere( array3D const &A0, array3D const &A1, array3D const &centre, double radius, const double distanceTolerance = DEFAULT_DISTANCE_TOLERANCE);
264
265void computeAABBSegment( array3D const &, array3D const &, array3D &, array3D & ) ;
266void computeAABBTriangle( array3D const &, array3D const &, array3D const &, array3D &, array3D & ) ;
267void computeAABBPolygon( std::vector<array3D> const &, array3D &, array3D & );
268void computeAABBPolygon( std::size_t, array3D const *, array3D &, array3D & );
269
270void unionAABB( array3D const &, array3D const &, array3D const &, array3D const &, array3D &, array3D & );
271void intersectionAABB( array3D const &, array3D const &, array3D const &, array3D const &, array3D &, array3D & );
272void subtractionAABB( array3D const &, array3D const &, array3D const &, array3D const &, array3D &, array3D & );
273void unionAABB( std::vector<array3D> const &, std::vector<array3D> const &, array3D &, array3D & );
274
275array3D rotateVector( array3D const &, array3D const &, double);
276double areaTriangle( array3D const &, array3D const &, array3D const &);
277
278void vertexOfSegment( int, array3D const &, array3D const &, array3D &);
279
280void vertexOfTriangle( int, array3D const &, array3D const &, array3D const &, array3D &);
281void edgeOfTriangle( int, array3D const &, array3D const &, array3D const &, array3D &, array3D &);
282
283void vertexOfBox( int, array3D const &, array3D const &, array3D &);
284void edgeOfBox( int, array3D const &, array3D const &, array3D &, array3D &);
285void faceOfBox( int, array3D const &, array3D const &, array3D &, array3D &, array3D &, array3D & );
286
287int polygonEdgesCount(std::vector<array3D> const &);
288int polygonEdgesCount(std::size_t, array3D const *);
289int polygonSubtriangleCount(std::vector<array3D> const &);
290int polygonSubtriangleCount(std::size_t, array3D const *);
291void edgeOfPolygon( int, std::vector<array3D> const &, array3D &, array3D &);
292void edgeOfPolygon( int, std::size_t, array3D const *, array3D &, array3D &);
293void subtriangleOfPolygon( int, std::vector<array3D> const &, array3D &, array3D &, array3D &);
294void subtriangleOfPolygon( int, std::size_t, array3D const *, array3D &, array3D &, array3D &);
295
296}
297
298// Algorithms =============================================================== //
299
300namespace CGAlgorithms {
301
302double grad1DUpdate( // Update the local solution to the 1D grad limiting equation on a vertex of a 1D manifold
303 int , // (input) number of simplicies
304 std::vector<std::array<double,3>> &, // (input) vertex coordinate list
305 std::vector<std::vector<int>> &, // (input) simplex-vertex connectivity
306 std::vector<std::vector<std::vector<int>>> &, // (input) simplex-simplex adjacency
307 std::vector<double> &, // (input) scalar field to be limited
308 int , // (input) global index of simplex containing the vertex
309 int , // (input) local index of vertex
310 double , // (input) max slope
311 std::vector<bool> & // (input) flag for dead/alive vertices
312 );
313
314void gradLimiting1D( // Solve the grad limiting eq. on a 1D manifold in a 2D Euclidean space
315 int , // (input) number of simplicies
316 std::vector<std::array<double,3>> &, // (input) vertex coordinate list
317 std::vector<std::vector<int>> &, // (input) simplex-vertex connectivity
318 std::vector<std::vector<std::vector<int>>> &, // (input) simplex-simplex adjacency
319 std::vector<double> &, // (input) scalar field to be limited
320 double // (input) max slope
321 );
322
323double grad2DUpdate( // Update the local solution to the 2D grad limiting equation on a vertex of a 2D manifold
324 int , // (input) number of simplicies
325 std::vector<std::array<double,3>> &, // (input) vertex coordinate list
326 std::vector<std::vector<int>> &, // (input) simplex-vertex connectivity
327 std::vector<std::vector<std::vector<int>>> &, // (input) list of simplicies in the 1-ring of the given vertex
328 std::vector<double> &, // (input) scalar field to be limited
329 int , // (input) global index of simplex containing the vertex
330 int , // (input) local index of vertex
331 double , // (input) max slope
332 std::vector<bool> & // (input) flag for dead/alive vertices
333 );
334
335void gradLimiting2D( // Solve the grad limiting eq. on a 2D manifold in a 3D Euclidean space
336 int , // (input) number of simplicies
337 std::vector<std::array<double,3>> &, // (input) vertex coordinate list
338 std::vector<std::vector<int>> &, // (input) simplex-vertex connectivity
339 std::vector<double> &, // (input/output) scalar field to be limited
340 double // (input) max slope
341 );
342
343double grad2DUpdate( // Update the local solution to the 2D grad limiting equation on a cell of a 2D volume
344 int , // (input) number of simplicies
345 std::vector<std::array<double,3>> &, // (input) vertex coordinate list
346 std::vector<std::vector<int>> &, // (input) simplex-vertex connectivity
347 std::vector<std::vector<int>> &, // (input) simplex-simplex adjacency
348 std::vector<double> &, // (input) scalar field to be limited
349 int , // (input) global index of simplex to be updated
350 double , // (input) max slope
351 std::vector<bool> & // (input) flag for dead/alive vertices
352 );
353
354void gradLimiting2D( // Solve the grad limiting eq. in a 2D volume
355 int , // (input) number of simplicies
356 std::vector<std::array<double,3>> &, // (input) vertex coordinate list
357 std::vector<std::vector<int>> &, // (input) simplex-vertex connectivity,
358 std::vector<std::vector<int>> &, // (input) simplex-simplex adjacency
359 std::vector<double> &, // (input/output) scalar field to be limited
360 double // (input) max slope
361 );
362}
363
364}
365
366
367# endif
void edgeOfPolygon(int, std::vector< array3D > const &, array3D &, array3D &)
Definition CG_elem.cpp:3698
std::vector< double > distanceCloudTriangle(std::vector< array3D > const &, array3D const &, array3D const &, array3D const &)
Definition CG_elem.cpp:1454
double distancePointLine(array3D const &, array3D const &, array3D const &, array3D &)
Definition CG_elem.cpp:1356
double distancePointCone(array3D const &, array3D const &, array3D const &, double)
Definition CG_elem.cpp:1440
array3D projectPointLine(array3D const &, array3D const &, array3D const &)
Definition CG_elem.cpp:971
void edgeOfTriangle(int, array3D const &, array3D const &, array3D const &, array3D &, array3D &)
Definition CG_elem.cpp:3463
const std::array< std::array< int, 2 >, 12 > boxEdgeVertexConnectivity
Definition CG.hpp:53
bool intersectPlaneBox(array3D const &, array3D const &, array3D const &, array3D const &, int dim=3, const double distanceTolerance=DEFAULT_DISTANCE_TOLERANCE)
Definition CG_elem.cpp:1954
void unionAABB(array3D const &, array3D const &, array3D const &, array3D const &, array3D &, array3D &)
Definition CG_elem.cpp:3314
bool intersectPointTriangle(array3D const &, array3D const &, array3D const &, array3D const &, const double distanceTolerance=DEFAULT_DISTANCE_TOLERANCE)
Definition CG_elem.cpp:3196
array3D computePolygonNormal(std::size_t nV, const array3D *V)
Definition CG_elem.cpp:2638
bool intersectBoxBox(array3D const &, array3D const &, array3D const &, array3D const &, int dim=3, const double distanceTolerance=DEFAULT_DISTANCE_TOLERANCE)
Definition CG_elem.cpp:2772
array3D projectPointTriangle(array3D const &, array3D const &, array3D const &, array3D const &)
Definition CG_elem.cpp:1050
array3D rotateVector(array3D const &, array3D const &, double)
Definition CG_elem.cpp:3615
array3D projectPointSegment(array3D const &, array3D const &, array3D const &)
Definition CG_elem.cpp:997
bool intersectPlaneTriangle(array3D const &P0, array3D const &P1, array3D const &P2, array3D const &Pp, array3D const &nP, std::array< array3D, 2 > &intersection, std::array< int, 2 > &edges_of_intersection, const double distanceTolerance=DEFAULT_COPLANARITY_TOLERANCE)
Definition CG_elem.cpp:2309
double distancePointPlane(array3D const &, array3D const &, array3D const &, array3D &)
Definition CG_elem.cpp:1370
bool intersectBoxTriangle(array3D const &, array3D const &, array3D const &, array3D const &, array3D const &, int dim=3, const double distanceTolerance=DEFAULT_DISTANCE_TOLERANCE)
Definition CG_elem.cpp:2824
int convertBarycentricToFlagSegment(std::array< double, 2 > const &, double tolerance=DEFAULT_DISTANCE_TOLERANCE)
Definition CG_elem.cpp:619
void computeAABBTriangle(array3D const &, array3D const &, array3D const &, array3D &, array3D &)
Definition CG_elem.cpp:3256
bool validBarycentric(double const *, int)
Definition CG_elem.cpp:586
void intersectionAABB(array3D const &, array3D const &, array3D const &, array3D const &, array3D &, array3D &)
Definition CG_elem.cpp:3357
double distanceLineLine(array3D const &, array3D const &, array3D const &, array3D const &)
Definition CG_elem.cpp:1729
bool intersectPlanePixel(array3D const &Pp, array3D const &nP, array3D const *V, std::array< array3D, 2 > &intersection, std::array< int, 2 > &edges_of_intersection, const double distanceTolerance=DEFAULT_COPLANARITY_TOLERANCE)
Definition CG_elem.cpp:2138
array3D reconstructPointFromBarycentricTriangle(array3D const &, array3D const &, array3D const &, std::array< double, 3 > const &)
Definition CG_elem.cpp:858
array3D reconstructPointFromBarycentricSegment(array3D const &, array3D const &, std::array< double, 2 > const &)
Definition CG_elem.cpp:829
const std::array< std::array< int, 4 >, 6 > boxFaceVertexConnectivity
Definition CG.hpp:73
std::vector< double > distanceCloudPolygon(std::vector< array3D > const &, std::vector< array3D > const &, std::vector< array3D > &, std::vector< int > &)
Definition CG_elem.cpp:1599
void vertexOfSegment(int, array3D const &, array3D const &, array3D &)
Definition CG_elem.cpp:3402
void vertexOfTriangle(int, array3D const &, array3D const &, array3D const &, array3D &)
Definition CG_elem.cpp:3430
int convertBarycentricToFlagPolygon(std::vector< double > const &, double tolerance=DEFAULT_DISTANCE_TOLERANCE)
Definition CG_elem.cpp:687
bool intersectSegmentPlane(array3D const &, array3D const &, array3D const &, array3D const &, array3D &, const double distanceTolerance=DEFAULT_DISTANCE_TOLERANCE)
Definition CG_elem.cpp:1872
bool intersectLineTriangle(array3D const &, array3D const &, array3D const &, array3D const &, array3D const &, array3D &, const double distanceTolerance=DEFAULT_DISTANCE_TOLERANCE)
Definition CG_elem.cpp:1988
bool intersectSegmentSegment(array3D const &, array3D const &, array3D const &, array3D const &, array3D &, const double distanceTolerance=DEFAULT_DISTANCE_TOLERANCE)
Definition CG_elem.cpp:1808
double distancePointTriangle(array3D const &, array3D const &, array3D const &, array3D const &)
Definition CG_elem.cpp:1411
bool intersectPointLine(array3D const &, array3D const &, array3D const &, const double distanceTolerance=DEFAULT_DISTANCE_TOLERANCE)
Definition CG_elem.cpp:3157
int polygonEdgesCount(std::vector< array3D > const &)
Definition CG_elem.cpp:3643
int polygonSubtriangleCount(std::vector< array3D > const &)
Definition CG_elem.cpp:3669
bool intersectBoxSphere(array3D const &A0, array3D const &A1, array3D const &centre, double radius, const double distanceTolerance=DEFAULT_DISTANCE_TOLERANCE)
Definition CG_elem.cpp:3063
int convertBarycentricToFlagTriangle(std::array< double, 3 > const &, double tolerance=DEFAULT_DISTANCE_TOLERANCE)
Definition CG_elem.cpp:659
double areaTriangle(array3D const &, array3D const &, array3D const &)
Definition CG_elem.cpp:3634
array3D projectPointPlane(array3D const &, array3D const &, array3D const &)
Definition CG_elem.cpp:984
void subtriangleOfPolygon(int, std::vector< array3D > const &, array3D &, array3D &, array3D &)
Definition CG_elem.cpp:3734
bool intersectSegmentBox(array3D const &, array3D const &, array3D const &, array3D const &, int dim=3, const double distanceTolerance=DEFAULT_DISTANCE_TOLERANCE)
Definition CG_elem.cpp:2880
bool intersectPlanePlane(array3D const &, array3D const &, array3D const &, array3D const &, array3D &, array3D &, const double coplanarityTolerance=DEFAULT_COPLANARITY_TOLERANCE)
Definition CG_elem.cpp:1902
void computeGeneralizedBarycentric(array3D const &, std::vector< array3D > const &, std::vector< double > &)
Definition CG_elem.cpp:751
double distancePointSegment(array3D const &, array3D const &, array3D const &)
Definition CG_elem.cpp:1383
bool intersectLinePlane(array3D const &, array3D const &, array3D const &, array3D const &, array3D &, const double coplanarityTolerance=DEFAULT_COPLANARITY_TOLERANCE)
Definition CG_elem.cpp:1839
bool validPlane(array3D const &, array3D const &)
Definition CG_elem.cpp:541
array3D rotatePoint(const array3D &P, const array3D &n0, const array3D &n1, double angle)
Definition CG_elem.cpp:893
double distancePointPolygon(array3D const &, std::vector< array3D > const &, array3D &, int &)
Definition CG_elem.cpp:1500
bool validLine(array3D const &, array3D const &)
Definition CG_elem.cpp:529
void computeAABBPolygon(std::vector< array3D > const &, array3D &, array3D &)
Definition CG_elem.cpp:3278
bool validTriangle(array3D const &, array3D const &, array3D const &)
Definition CG_elem.cpp:554
array3D reconstructPointFromBarycentricPolygon(std::vector< array3D > const &, std::vector< double > const &)
Definition CG_elem.cpp:928
bool intersectSegmentTriangle(array3D const &, array3D const &, array3D const &, array3D const &, array3D const &, array3D &, const double distanceTolerance=DEFAULT_DISTANCE_TOLERANCE)
Definition CG_elem.cpp:2016
array3D restrictPointTriangle(array3D const &, array3D const &, array3D const &, array3D &)
Definition CG_elem.cpp:1097
bool intersectBoxPolygon(array3D const &, array3D const &, std::vector< array3D > const &, int dim=3, const double distanceTolerance=DEFAULT_DISTANCE_TOLERANCE)
Definition CG_elem.cpp:2931
void faceOfBox(int, array3D const &, array3D const &, array3D &, array3D &, array3D &, array3D &)
Definition CG_elem.cpp:3500
bool intersectPlanePolygon(array3D const &P, array3D const &nP, std::size_t nV, array3D const *V, std::vector< std::array< array3D, 2 > > &Qs, std::vector< std::array< int, 2 > > &edges_of_Qs, const double distanceTolerance=DEFAULT_COPLANARITY_TOLERANCE)
Definition CG_elem.cpp:2460
std::vector< array3D > projectCloudTriangle(std::vector< array3D > const &, array3D const &, array3D const &, array3D const &, std::vector< array3D > &)
Definition CG_elem.cpp:1194
void reconstructPlaneIntersectedPolygons(std::size_t nV, array3D const *V, std::vector< std::array< array3D, 2 > > const &Qs, std::vector< std::array< int, 2 > > const &edges_of_Qs, std::vector< std::vector< array3D > > &polys, const double distanceTolerance=DEFAULT_DISTANCE_TOLERANCE)
Definition CG_elem.cpp:2680
array3D projectPointCone(array3D const &, array3D const &, array3D const &, double)
Definition CG_elem.cpp:1315
void vertexOfBox(int, array3D const &, array3D const &, array3D &)
Definition CG_elem.cpp:3546
void edgeOfBox(int, array3D const &, array3D const &, array3D &, array3D &)
Definition CG_elem.cpp:3526
void subtractionAABB(array3D const &, array3D const &, array3D const &, array3D const &, array3D &, array3D &)
Definition CG_elem.cpp:3372
array3D projectPointPolygon(array3D const &, std::vector< array3D > const &)
Definition CG_elem.cpp:1215
bool validSegment(array3D const &, array3D const &)
Definition CG_elem.cpp:518
void computeAABBSegment(array3D const &, array3D const &, array3D &, array3D &)
Definition CG_elem.cpp:3234
bool intersectPointBox(array3D const &, array3D const &, array3D const &, int dim=3, const double distanceTolerance=DEFAULT_DISTANCE_TOLERANCE)
Definition CG_elem.cpp:3215
bool intersectPointSegment(array3D const &, array3D const &, array3D const &, const double distanceTolerance=DEFAULT_DISTANCE_TOLERANCE)
Definition CG_elem.cpp:3177
bool intersectLineLine(array3D const &, array3D const &, array3D const &, array3D const &, array3D &, const double distanceTolerance=DEFAULT_DISTANCE_TOLERANCE)
Definition CG_elem.cpp:1787
bool intersectBoxCircle(array3D const &A0, array3D const &A1, array3D const &centre, double radius, const double distanceTolerance=DEFAULT_DISTANCE_TOLERANCE)
Definition CG_elem.cpp:3037
bool intersectLinePolygon(array3D const &, array3D const &, std::vector< array3D > const &, array3D &, const double distanceTolerance=DEFAULT_DISTANCE_TOLERANCE)
Definition CG_elem.cpp:2042
bool intersectSegmentPolygon(array3D const &, array3D const &, std::vector< array3D > const &, array3D &, const double distanceTolerance=DEFAULT_DISTANCE_TOLERANCE)
Definition CG_elem.cpp:2084