Assignments
Assignments
geometry.h
Go to the documentation of this file.
1/*
2Copyright (c) 2019, Michael Kazhdan
3All rights reserved.
4
5Redistribution and use in source and binary forms, with or without modification,
6are permitted provided that the following conditions are met:
7
8Redistributions of source code must retain the above copyright notice, this list of
9conditions and the following disclaimer. Redistributions in binary form must reproduce
10the above copyright notice, this list of conditions and the following disclaimer
11in the documentation and/or other materials provided with the distribution.
12
13Neither the name of the Johns Hopkins University nor the names of its contributors
14may be used to endorse or promote products derived from this software without specific
15prior written permission.
16
17THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
18EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO THE IMPLIED WARRANTIES
19OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
20SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
21INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
22TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
23BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
25ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
26DAMAGE.
27*/
28
29#ifndef GEOMETRY_INCLUDED
30#define GEOMETRY_INCLUDED
31
32#include <iostream>
33#include <string>
34#include <limits>
35#include <Util/algebra.h>
36
37namespace Util
38{
39 static const double Pi = 3.1415926535897932384;
40 static const double Epsilon = 1e-10;
41 static const double Infinity = std::numeric_limits< double >::infinity();
42
43 /*** This is a simple class defining globally accessible variables. */
45 {
46 static bool DebugFlag;
47 };
48
50 template< unsigned int Dim >
51 class Point : public InnerProductSpace< Point< Dim > >
52 {
54 double _p[Dim];
55
57 void _init( const double *values , unsigned int sz );
58 public:
60 Point( void );
61
63 Point( const Point &p );
64
66 template< typename ... Doubles >
67 Point( Doubles ... values );
68
70 double &operator[] ( int index );
71
73 const double &operator[] ( int index ) const;
74
76 Point operator * ( const Point &p ) const;
77
79 Point &operator *= ( const Point &p );
80
82 Point operator / ( const Point &p ) const;
83
85 Point& operator /= ( const Point &p );
86
88 template< typename ... Points >
89 static Point CrossProduct( Points ... points );
90
92 static Point CrossProduct( Point *points );
93
95 static Point CrossProduct( const Point *points );
96
98 // InnerProductSpace methods //
100
102 Point operator * ( double s ) const;
103
105 Point operator + ( const Point &p ) const;
106
108 double dot( const Point &p ) const;
109 };
110
112 template<> class Point< 0 >{};
113
115 template< unsigned int Dim >
116 std::ostream &operator << ( std::ostream &stream , const Point< Dim > &p );
117
119 template< unsigned int Dim >
120 std::istream &operator >> ( std::istream &stream , Point< Dim > &p );
121
124 template< unsigned int Rows , unsigned int Cols , typename MatrixType , typename MatrixTransposeType >
126 {
128 double _m[Rows][Cols];
129 public:
131 _BaseMatrix( void );
132
134 double &operator() ( int r , int c );
135
137 const double &operator() ( int r , int c ) const;
138
140 MatrixTransposeType transpose( void ) const;
141
143 Point< Rows > operator * ( const Point< Cols > &p ) const;
144
146 // Algebra methods //
148
149 MatrixType operator * ( double s ) const;
150
152 MatrixType operator + ( const MatrixType &m ) const;
153
155 // InnerProductSpace methods //
157
158 double dot( const _BaseMatrix &p ) const;
159 };
160
161
162 template< unsigned int Rows , unsigned int Cols > class Matrix;
163
166 template< unsigned int Rows , unsigned int Cols >
167 class Matrix : public _BaseMatrix< Rows , Cols , Matrix< Rows , Cols > , Matrix< Cols , Rows > > , InnerProductSpace< Matrix< Rows , Cols > >
168 {
169 public:
172 using _BaseMatrix< Rows , Cols , Matrix< Rows , Cols > , Matrix< Cols , Rows > >::operator *;
173 using _BaseMatrix< Rows , Cols , Matrix< Rows , Cols > , Matrix< Cols , Rows > >::operator ();
175
177 Matrix( void );
178
180 template< unsigned int _Cols >
182 };
183
185 template< unsigned int Dim >
186 class Matrix< Dim , Dim > : public _BaseMatrix< Dim , Dim , Matrix< Dim , Dim > , Matrix< Dim , Dim > > , public InnerProductSpace< Matrix< Dim , Dim > > , Algebra< Matrix< Dim , Dim > >
187 {
188 public:
191 using _BaseMatrix< Dim , Dim , Matrix< Dim , Dim > , Matrix< Dim , Dim > >::operator *;
192 using _BaseMatrix< Dim , Dim , Matrix< Dim , Dim > , Matrix< Dim , Dim > >::operator ();
194
196 Matrix( void );
197
200
203
205 double subDeterminant( int r , int c ) const;
206
208 double determinant( void ) const;
209
211 double trace( void ) const;
212
215 Matrix inverse( void ) const;
216
219 bool setInverse( Matrix &m ) const;
220
222 Point< Dim-1 > operator * ( const Point< Dim-1 > &p ) const;
223
225 static Matrix Identity( void );
226
228 static Matrix Log( const Matrix &m , double eps=0.0001 );
229
231 static Matrix SquareRoot( const Matrix &m , double eps=0.000001 );
232
235 void SVD( Matrix &r1 , Matrix &diagonal , Matrix &r2 ) const;
236
238 Matrix symmetrize( void ) const;
239
241 Matrix skewSymmetrize( void ) const;
242
244 static Matrix Exp( const Matrix &m , int terms=100 );
245
247 Matrix closestRotation( void ) const;
248
250 // Algebra methods //
252
253 template< unsigned int Cols >
255 };
256
258 template< unsigned int Rows , unsigned int Cols , typename MatrixType , typename MatrixTransposeType >
259 std::ostream &operator << ( std::ostream &stream , const _BaseMatrix< Rows , Cols , MatrixType , MatrixTransposeType > &m );
260
262 template< unsigned int Rows , unsigned int Cols , typename MatrixType , typename MatrixTransposeType >
263 std::istream &operator >> ( std::istream &stream , _BaseMatrix< Rows , Cols , MatrixType , MatrixTransposeType > &m );
264
265
267 template< unsigned int Dim >
268 class Plane
269 {
270 public:
274 double distance;
275
277 Plane( void );
278
280 Plane( const Point< Dim > &n , const Point< Dim > &p );
281
283 template< typename ... Points >
284 Plane( Points ... points );
285
287 Plane( Point< Dim > *points );
288
290 Plane( const Point< Dim > *points );
291
293 double operator()( const Point< Dim > &p ) const;
294 };
295
297 template< unsigned int Dim >
298 class Ray
299 {
300 public:
303
306
308 Ray( void );
309
312
314 Ray operator + ( const Point< Dim > &p ) const;
315
317 Ray &operator += ( const Point< Dim > &p );
318
320 Ray operator - ( const Point< Dim > &p ) const;
321
323 Ray &operator -= ( const Point< Dim > &p );
324
326 Point< Dim > operator() ( double t ) const;
327 };
328
330 template< unsigned int Dim >
332
334 template< unsigned int Dim >
335 std::ostream &operator << ( std::ostream &stream , const Ray< Dim > &ray )
336 {
337 stream << "[ " << ray.position << " ] [ " << ray.direction << " ]";
338 return stream;
339 }
340
343 template< unsigned int Dim >
345 {
346 template< unsigned int _Dim >
348
351 public:
353 BoundingBox( void );
354
356 BoundingBox( const Point< Dim > &p1 , const Point< Dim > &p2 );
357
359 BoundingBox( const Point< Dim > *pList , int pSize );
360
363 Point< Dim > &operator[] ( int index );
364
367 const Point< Dim > &operator[] ( int index ) const;
368
371 BoundingBox operator + ( const BoundingBox &b ) const;
372
376
378 BoundingBox operator ^ ( const BoundingBox &b ) const;
379
382
384 bool isInside( const Point< Dim > &p ) const;
385
387 bool isEmpty( void ) const;
388
391 BoundingBox< 1 > intersect( const Ray< Dim > &ray ) const;
392 };
393
394 template< unsigned int Dim > struct QuadricBoundingBoxIntersectionInfo;
395
397 template< unsigned int Dim >
399 {
402 double _C;
403
404 template< unsigned int _Dim >
405 friend class Quadric;
406
407 public:
409 Quadric( void );
410
413 Quadric( const Matrix< Dim , Dim > &Q , const Point< Dim > &L , const double &C );
414
417
420
422 Matrix< Dim , Dim > getQuadratic( void ) const;
423
425 Point< Dim > getLinear( void ) const;
426
428 double getConstant( void ) const;
429
432
434 void setLinear( Point< Dim > L );
435
437 void setConstant( double C );
438
440 double operator()( const Point< Dim > &p ) const;
441
443 Quadric< 1 > intersect( const Ray< Dim > &ray ) const;
444
449 bool setExtremum( Point< Dim > &extremum ) const;
450
454 template< unsigned int _Dim >
456
460 Quadric< Dim > operator + ( const Point< Dim > &t ) const;
461
462 template< unsigned int _Dim > friend struct QuadricBoundingBoxOverlap;
463 };
464
465 template< unsigned int Dim >
467 {
470
472 bool operator()( const BoundingBox< Dim > & bBox ) const;
473 protected:
474 template< unsigned int _Dim > friend struct QuadricBoundingBoxOverlap;
480
482 void _set( const Quadric< Dim > &Q );
483 bool _intersect( const Quadric< Dim > &Q , const BoundingBox< Dim > &bBox ) const;
484 };
485
486 template<>
488 {
491
493 bool operator()( const BoundingBox< 1 > & bBox ) const;
494 protected:
495 template< unsigned int _Dim > friend struct QuadricBoundingBoxOverlap;
500
502 void _set( const Quadric< 1 > &Q );
503 bool _intersect( const Quadric< 1 > &Q , const BoundingBox< 1 > &bBox ) const;
504 };
505
508 template< unsigned int Dim >
509 BoundingBox< Dim > operator * ( const Matrix< Dim+1 , Dim+1 > &m , const BoundingBox< Dim > &b );
510
512 template< unsigned int Dim >
513 std::ostream &operator << ( std::ostream &stream , const Point< Dim > &p );
514
516 // Classes specialized for 2D, 3D, and 4D //
518
521
524
527
530
532 template< unsigned int Dim > using SquareMatrix = Matrix< Dim , Dim >;
533
536
539
542
545
548
551
554
557
560
563
566
569
572
575
578
580 class Quaternion : public Field< Quaternion > , public _InnerProductSpace< Quaternion >
581 {
582 public:
584 double real;
585
588
590 Quaternion( double r=0 , Point3D i = Point3D() );
591
593 double dot( const Quaternion& q ) const;
594
596 Quaternion conjugate( void ) const;
597
599 // Field methods //
601
603 Quaternion additiveInverse( void ) const;
604
606 Quaternion multiplicativeInverse( void ) const;
607
609 Quaternion operator * ( double scale ) const;
610
612 Quaternion operator + ( const Quaternion& q ) const;
613
615 Quaternion operator * ( const Quaternion& q ) const;
616
617 };
618
620 namespace RotationParameters
621 {
623 enum
624 {
630 COUNT
631 };
632
634 const std::string Names[] = { "trivial" , "closest rotation" , "euler" , "skew symmetric" , "quaternion" };
635 }
636
638 template< typename RotationParameterType , typename ParameterType >
640 {
641 public:
643
645 virtual Matrix3D operator()( void ) const = 0;
646
648 // VectorSpace methods //
650
652 RotationParameterType operator * ( double scale ) const;
653
655 RotationParameterType operator + ( const RotationParameterType &p ) const;
656 };
657
659 class TrivialRotationParameter : public RotationParameter< TrivialRotationParameter , Matrix3D > , public VectorSpace< TrivialRotationParameter >
660 {
661 public:
664
667
669 TrivialRotationParameter( const Matrix3D &r , const TrivialRotationParameter &previous );
670
672 Matrix3D operator()( void ) const;
673 };
674
676 class EulerRotationParameter : public RotationParameter< EulerRotationParameter , Point3D > , public VectorSpace< EulerRotationParameter >
677 {
678 public:
681
684
686 EulerRotationParameter( const Matrix3D &r , const EulerRotationParameter &previous );
687
689 Matrix3D operator()( void ) const;
690 };
691
693 class MatrixRotationParameter : public RotationParameter< MatrixRotationParameter , Matrix3D > , public VectorSpace< MatrixRotationParameter >
694 {
695 public:
698
701
703 MatrixRotationParameter( const Matrix3D &r , const MatrixRotationParameter &previous );
704
706 Matrix3D operator()( void ) const;
707 };
708
710 class SkewSymmetricRotationParameter : public RotationParameter< SkewSymmetricRotationParameter , Point3D > , public VectorSpace< SkewSymmetricRotationParameter >
711 {
712 Matrix3D _toMatrix( void ) const;
713 void _fromMatrix( const Matrix3D &skew );
714 public:
717
720
723
725 Matrix3D operator()( void ) const;
726 };
727
729 class QuaternionRotationParameter : public RotationParameter< QuaternionRotationParameter , Quaternion > , public VectorSpace< QuaternionRotationParameter >
730 {
731 public:
734
737
740
742 Matrix3D operator()( void ) const;
743 };
744
746 template< typename RotationParameterType >
747 class TransformationParameter : public VectorSpace< TransformationParameter< RotationParameterType > >
748 {
749 public:
751 RotationParameterType rotationParameter;
752
755
758
761
764
766 TransformationParameter operator * ( double scale ) const;
767
770
772 Matrix4D operator()( void ) const;
773 };
774}
775#include "geometry.inl"
776#include "geometry.todo.inl"
777#endif // GEOMETRY_INCLUDED
const GXMatrixMNTC< Coord > Identity(unsigned int cOrder)
Definition geometry.h:126
Point< Rows > operator*(const Point< Cols > &p) const
Definition geometry.inl:169
double & operator()(int r, int c)
Definition geometry.inl:155
double _m[Rows][Cols]
Definition geometry.h:128
_BaseMatrix(void)
Definition geometry.inl:152
MatrixType operator+(const MatrixType &m) const
Definition geometry.inl:180
double dot(const _BaseMatrix &p) const
Definition geometry.inl:144
MatrixTransposeType transpose(void) const
Definition geometry.inl:161
Definition algebra.h:99
Definition algebra.h:143
Definition geometry.h:345
BoundingBox(void)
Definition geometry.inl:503
friend BoundingBox< _Dim > operator*(const Matrix< _Dim+1, _Dim+1 > &, const BoundingBox< _Dim > &)
bool isEmpty(void) const
Definition geometry.inl:580
BoundingBox & operator^=(const BoundingBox &b)
Definition geometry.inl:557
BoundingBox & operator+=(const BoundingBox &b)
Definition geometry.inl:543
bool isInside(const Point< Dim > &p) const
Definition geometry.inl:573
BoundingBox operator+(const BoundingBox &b) const
Definition geometry.inl:528
Point< Dim > & operator[](int index)
Definition geometry.inl:522
BoundingBox operator^(const BoundingBox &b) const
Definition geometry.inl:546
Point< Dim > _p[2]
Definition geometry.h:350
BoundingBox< 1 > intersect(const Ray< Dim > &ray) const
Definition geometry.todo.inl:58
Definition geometry.h:677
Matrix3D operator()(void) const
Definition geometry.todo.cpp:39
EulerRotationParameter(void)
Definition geometry.cpp:76
Definition algebra.h:57
Definition algebra.h:133
Definition geometry.h:187
Matrix(const Matrix< Dim-1, Dim-1 > &m, Point< Dim-1 > p=Point< Dim-1 >())
Matrix(const Matrix< Dim+1, Dim+1 > &m)
Definition geometry.h:168
Matrix(void)
Definition geometry.inl:185
Definition geometry.h:694
Matrix3D operator()(void) const
Definition geometry.cpp:136
MatrixRotationParameter(void)
Definition geometry.cpp:130
Definition geometry.h:269
double distance
Definition geometry.h:274
Point< Dim > normal
Definition geometry.h:272
Plane(void)
Definition geometry.inl:432
double operator()(const Point< Dim > &p) const
Definition geometry.inl:463
Definition geometry.h:52
static Point CrossProduct(Points ... points)
double & operator[](int index)
Definition geometry.inl:77
Point(void)
Definition geometry.inl:48
void _init(const double *values, unsigned int sz)
Definition geometry.inl:40
double _p[Dim]
Definition geometry.h:54
Point operator+(const Point &p) const
Definition geometry.inl:66
double dot(const Point &p) const
Definition geometry.inl:69
Definition geometry.h:399
Quadric< 1 > intersect(const Ray< Dim > &ray) const
Definition geometry.todo.inl:71
double getConstant(void) const
Definition geometry.inl:633
Quadric< _Dim > operator*(const Matrix< Dim, _Dim > &T) const
Definition geometry.inl:649
friend class Quadric
Definition geometry.h:405
Point< Dim > getLinear(void) const
Definition geometry.inl:630
Matrix< Dim+1, Dim+1 > operator()(void) const
Definition geometry.inl:614
void setQuadratic(Matrix< Dim, Dim > Q)
Definition geometry.inl:636
bool setExtremum(Point< Dim > &extremum) const
Definition geometry.inl:675
void setLinear(Point< Dim > L)
Definition geometry.inl:639
Matrix< Dim, Dim > _Q
Definition geometry.h:400
Matrix< Dim, Dim > getQuadratic(void) const
Definition geometry.inl:627
void setConstant(double C)
Definition geometry.inl:642
Point< Dim > _L
Definition geometry.h:401
Quadric< Dim > operator+(const Point< Dim > &t) const
Definition geometry.inl:662
double _C
Definition geometry.h:402
Definition geometry.h:581
Quaternion multiplicativeInverse(void) const
Definition geometry.cpp:50
double real
Definition geometry.h:584
Quaternion(double r=0, Point3D i=Point3D())
Definition geometry.cpp:46
Quaternion operator+(const Quaternion &q) const
Definition geometry.cpp:56
Quaternion additiveInverse(void) const
Definition geometry.cpp:48
Quaternion operator*(double scale) const
Definition geometry.cpp:54
Point3D imag
Definition geometry.h:587
Quaternion conjugate(void) const
Definition geometry.cpp:60
double dot(const Quaternion &q) const
Definition geometry.cpp:52
Definition geometry.h:730
Matrix3D operator()(void) const
Definition geometry.todo.cpp:51
QuaternionRotationParameter(void)
Definition geometry.cpp:209
Definition geometry.h:299
Ray operator+(const Point< Dim > &p) const
Definition geometry.inl:481
Point< Dim > direction
Definition geometry.h:305
Ray(void)
Definition geometry.inl:472
Point< Dim > position
Definition geometry.h:302
Point< Dim > operator()(double t) const
Definition geometry.inl:478
Ray operator-(const Point< Dim > &p) const
Definition geometry.inl:487
Ray & operator+=(const Point< Dim > &p)
Definition geometry.inl:484
Ray & operator-=(const Point< Dim > &p)
Definition geometry.inl:490
Definition geometry.h:640
RotationParameterType operator+(const RotationParameterType &p) const
Definition geometry.inl:807
ParameterType parameter
Definition geometry.h:642
RotationParameterType operator*(double scale) const
Definition geometry.inl:799
virtual Matrix3D operator()(void) const =0
Definition geometry.h:711
Matrix3D _toMatrix(void) const
Definition geometry.cpp:141
void _fromMatrix(const Matrix3D &skew)
Definition geometry.cpp:150
SkewSymmetricRotationParameter(void)
Definition geometry.cpp:157
Matrix3D operator()(void) const
Definition geometry.cpp:204
Definition geometry.h:748
TransformationParameter operator+(const TransformationParameter &tp) const
Definition geometry.inl:827
RotationParameterType rotationParameter
Definition geometry.h:751
TransformationParameter(void)
Definition geometry.inl:836
Point3D translation
Definition geometry.h:754
Matrix4D operator()(void) const
Definition geometry.inl:851
Definition geometry.h:660
Matrix3D operator()(void) const
Definition geometry.cpp:71
TrivialRotationParameter(void)
Definition geometry.cpp:65
Definition algebra.h:66
friend Point< Dim > & operator*=(Point< Dim > &e, double s)
Definition algebra.h:81
friend Point< Dim > operator*(double s, const Point< Dim > &e)
Definition algebra.h:90
friend Point< Dim > operator/(const Point< Dim > &e, double s)
Definition algebra.h:72
friend Point< Dim > & operator/=(Point< Dim > &e, double s)
Definition algebra.h:84
long b
Definition jpegint.h:371
CmdLineParameter< int > ParameterType("parameter", RotationParameters::TRIVIAL+1)
Definition box.h:7
const std::string Names[]
Definition geometry.h:634
@ ROTATION
Definition geometry.h:626
@ QUATERNION
Definition geometry.h:629
@ TRIVIAL
Definition geometry.h:625
@ EULER
Definition geometry.h:627
@ SKEW_SYMMETRIC
Definition geometry.h:628
@ COUNT
Definition geometry.h:630
Definition algebra.h:7
Matrix< 3, 3 > Matrix3D
Definition geometry.h:541
Point< 1 > Point1D
Definition geometry.h:520
BoundingBox< 3 > BoundingBox3D
Definition geometry.h:574
Matrix< 4, 4 > Matrix4D
Definition geometry.h:544
Matrix< 2, 2 > Matrix2D
Definition geometry.h:538
BoundingBox< 2 > BoundingBox2D
Definition geometry.h:571
Matrix< 1, 1 > Matrix1D
Definition geometry.h:535
Ray< 1 > Ray1D
Definition geometry.h:556
Point< 3 > Point3D
Definition geometry.h:526
static const double Infinity
Definition geometry.h:41
std::ostream & operator<<(std::ostream &stream, const Point< Dim > &p)
Definition geometry.inl:127
BoundingBox< 1 > BoundingBox1D
Definition geometry.h:568
Ray< 3 > Ray3D
Definition geometry.h:562
Plane< 4 > Plane4D
Definition geometry.h:553
Plane< 3 > Plane3D
Definition geometry.h:550
Ray< 2 > Ray2D
Definition geometry.h:559
std::istream & operator>>(std::istream &stream, Point< Dim > &p)
Definition geometry.inl:134
Ray< 4 > Ray4D
Definition geometry.h:565
Ray< Dim > operator*(const Matrix< Dim+1, Dim+1 > &m, const Ray< Dim > &ray)
Definition geometry.inl:493
BoundingBox< 4 > BoundingBox4D
Definition geometry.h:577
Point< 4 > Point4D
Definition geometry.h:529
static const double Pi
Definition geometry.h:39
Plane< 2 > Plane2D
Definition geometry.h:547
static const double Epsilon
Definition geometry.h:40
Point< 2 > Point2D
Definition geometry.h:523
Definition geometry.h:45
static bool DebugFlag
Definition geometry.h:46
Matrix< 2, 1 > _T
Definition geometry.h:498
Quadric< 1 > _quadric
Definition geometry.h:496
Matrix< 1, 1 > _Q
Definition geometry.h:497
QuadricBoundingBoxOverlap(const Quadric< 1 > &Q)
Definition geometry.h:490
QuadricBoundingBoxOverlap(void)
Definition geometry.h:501
bool operator()(const BoundingBox< 1 > &bBox) const
Matrix< 1, 2 > _Tt
Definition geometry.h:499
Definition geometry.h:467
Matrix< Dim, Dim > _Qinv
Definition geometry.h:476
Matrix< Dim, Dim+1 > _Tt
Definition geometry.h:478
Matrix< Dim+1, Dim > _T
Definition geometry.h:477
Matrix< Dim, Dim+1 > _Tt_Q
Definition geometry.h:478
Matrix< Dim, Dim > _Q
Definition geometry.h:476
bool _intersect(const Quadric< Dim > &Q, const BoundingBox< Dim > &bBox) const
Definition geometry.inl:718
friend struct QuadricBoundingBoxOverlap
Definition geometry.h:474
struct QuadricBoundingBoxOverlap< Dim-1 > _boundaryInfo[Dim]
Definition geometry.h:479
Quadric< Dim > _quadric
Definition geometry.h:475
bool operator()(const BoundingBox< Dim > &bBox) const
Definition geometry.inl:698
void _set(const Quadric< Dim > &Q)
Definition geometry.inl:701