29#ifndef GEOMETRY_INCLUDED
30#define GEOMETRY_INCLUDED
39 static const double Pi = 3.1415926535897932384;
41 static const double Infinity = std::numeric_limits< double >::infinity();
50 template<
unsigned int Dim >
57 void _init(
const double *values ,
unsigned int sz );
66 template<
typename ... Doubles >
67 Point( Doubles ... values );
88 template<
typename ... Points >
115 template<
unsigned int Dim >
119 template<
unsigned int Dim >
124 template<
unsigned int Rows ,
unsigned int Cols ,
typename MatrixType ,
typename MatrixTransposeType >
128 double _m[Rows][Cols];
137 const double &
operator() (
int r ,
int c )
const;
140 MatrixTransposeType
transpose(
void )
const;
152 MatrixType
operator + (
const MatrixType &m )
const;
162 template<
unsigned int Rows ,
unsigned int Cols >
class Matrix;
166 template<
unsigned int Rows ,
unsigned int Cols >
180 template<
unsigned int _Cols >
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 > >
205 double subDeterminant(
int r ,
int c )
const;
208 double determinant(
void )
const;
211 double trace(
void )
const;
215 Matrix inverse(
void )
const;
219 bool setInverse(
Matrix &m )
const;
228 static Matrix Log(
const Matrix &m ,
double eps=0.0001 );
231 static Matrix SquareRoot(
const Matrix &m ,
double eps=0.000001 );
238 Matrix symmetrize(
void )
const;
241 Matrix skewSymmetrize(
void )
const;
247 Matrix closestRotation(
void )
const;
253 template<
unsigned int Cols >
186 class Matrix< Dim , Dim > :
public _BaseMatrix< Dim , Dim , Matrix< Dim , Dim > , Matrix< Dim , Dim > > ,
public InnerProductSpace< Matrix< Dim , Dim > > ,
Algebra< Matrix< Dim , Dim > > {
…};
258 template<
unsigned int Rows ,
unsigned int Cols ,
typename MatrixType ,
typename MatrixTransposeType >
262 template<
unsigned int Rows ,
unsigned int Cols ,
typename MatrixType ,
typename MatrixTransposeType >
267 template<
unsigned int Dim >
283 template<
typename ... Points >
284 Plane( Points ... points );
297 template<
unsigned int Dim >
330 template<
unsigned int Dim >
334 template<
unsigned int Dim >
343 template<
unsigned int Dim >
346 template<
unsigned int _Dim >
397 template<
unsigned int Dim >
404 template<
unsigned int _Dim >
454 template<
unsigned int _Dim >
465 template<
unsigned int Dim >
508 template<
unsigned int Dim >
509 BoundingBox< Dim >
operator * (
const Matrix< Dim+1 , Dim+1 > &m ,
const BoundingBox< Dim > &
b );
512 template<
unsigned int Dim >
513 std::ostream &
operator << ( std::ostream &stream ,
const Point< Dim > &p );
620 namespace RotationParameters
634 const std::string
Names[] = {
"trivial" ,
"closest rotation" ,
"euler" ,
"skew symmetric" ,
"quaternion" };
620 namespace RotationParameters {
…}
638 template<
typename RotationParameterType ,
typename ParameterType >
652 RotationParameterType
operator * (
double scale )
const;
655 RotationParameterType
operator + (
const RotationParameterType &p )
const;
746 template<
typename RotationParameterType >
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 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 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
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:660
Matrix3D operator()(void) const
Definition geometry.cpp:71
TrivialRotationParameter(void)
Definition geometry.cpp:65
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)
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
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
static bool DebugFlag
Definition geometry.h:46
Definition geometry.h:394
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