41 #include <Eigen/Array>
43 #include <Eigen/Geometry>
44 USING_PART_OF_NAMESPACE_EIGEN
61 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
63 inline double x()
const{
return _v(0); }
64 inline double y()
const{
return _v(1); }
65 inline void x(
const double &x) { _v[0] = x; }
66 inline void y(
const double &y) { _v[1] = y; }
69 laPoint2(
const double &ax,
const double &ay ) { _v[0] = ax; _v[1] = ay; }
71 laPoint2(
const Vector2d &pt ) { _v = _v; }
73 inline double* data() {
return _v.data(); }
79 inline const laPoint2& operator*=(
const double &m) { _v *= m;
return *
this; };
80 inline const laPoint2& operator/=(
const double &m) { _v /= m;
return *
this; };
81 inline const laPoint2& operator+=(
const laPoint2 &pt) { _v += pt._v;
return *
this; };
82 inline const laPoint2& operator-=(
const laPoint2 &pt) { _v -= pt._v;
return *
this; };
86 inline double dot(
const laPoint2 &p)
const{
88 return x()*p.x() + y()*p.y();
94 inline double cross(
const laPoint2 &p)
const{
96 return x()*p.y() - y()*p.x();
101 inline double lenght()
const{
102 return sqrt( x()*x() + y()*y() );
105 inline double lenght_sq()
const{
106 return ( x()*x() + y()*y() );
111 inline void normalize(){
114 return _v.normalize();
124 {
return laPoint2( pt1._v + pt2._v ); };
127 {
return laPoint2( pt1._v - pt2._v ); };
150 inline double& operator[] (
unsigned short n) {
return _v[n]; }
151 inline const double& operator() (
unsigned short n)
const{
return _v[n]; }
153 inline const double& x()
const{
return _v[0]; }
154 inline const double& y()
const{
return _v[1]; }
155 inline const double& z()
const{
return _v[2]; }
156 inline void x(
const double &ax) { _v[0] = ax; }
157 inline void y(
const double &ay) { _v[1] = ay; }
158 inline void z(
const double &az) { _v[2] = az; }
160 inline double* data() {
return _v; }
164 laPoint3() { _v[0]=_v[1]=_v[2]=0; };
165 laPoint3(
const double &x,
const double &y,
const double &z = 0) { _v[0] = x; _v[1] = y; _v[2] = z; }
166 laPoint3(
const laPoint3 &pt ) { _v[0]=pt(0); _v[1]=pt(1); _v[2]=pt(2); };
167 laPoint3(
const double *v ) { _v[0]=v[0]; _v[1]=v[1]; _v[2]=v[2]; }
170 laPoint3(
const laPoint2 &pt ) { _v[0]=pt(0); _v[1]=pt(1); _v[2] = 0; }
176 inline const laPoint3& operator*=(
const double &m) { _v[0]*=m; _v[1]*=m; _v[2]*=m;
return *
this; };
177 inline const laPoint3& operator/=(
const double &m) { _v[0]/=m; _v[1]/=m; _v[2]/=m;
return *
this; };
178 inline const laPoint3& operator+=(
const laPoint3 &pt) { _v[0]+=pt(0); _v[1]+=pt(1); _v[2]+=pt(2);
return *
this; };
179 inline const laPoint3& operator-=(
const laPoint3 &pt) { _v[0]-=pt(0); _v[1]-=pt(1); _v[2]-=pt(2);
return *
this; };
180 inline const laPoint3& operator*=(
const laPoint3 &pt) { _v[0]*=pt(0); _v[1]*=pt(1); _v[2]*=pt(2);
return *
this; };
181 inline const laPoint3& operator/=(
const laPoint3 &pt) { _v[0]/=pt(0); _v[1]/=pt(1); _v[2]*=pt(2);
return *
this; };
185 inline double dot(
const laPoint3 &p)
const{
186 return _v[0]*p(0) + _v[1]*p(1) + _v[2]*p(2);
191 inline laPoint3 cross(
const laPoint3 &p)
const{
194 ptCross._v[0] = _v[1] * p(2) - _v[2] * p(1);
195 ptCross._v[1] = _v[2] * p(0) - _v[0] * p(2);
196 ptCross._v[2] = _v[0] * p(1) - _v[1] * p(0);
203 inline double lenght()
const{
204 return sqrt(_v[0]*_v[0] + _v[1]*_v[1] + _v[2]*_v[2]);
207 inline double lenght_sq()
const{
208 return (_v[0]*_v[0] + _v[1]*_v[1] + _v[2]*_v[2]);
213 inline void normalize(){
214 double len = lenght();
215 ASSERT(len!=0,
"Attempted division by zero.");
222 inline double angle_cos(laPoint3 &p)
const{
223 return dot(p) / sqrt( lenght_sq() * p.lenght_sq() );
226 inline double angle(laPoint3 &p)
const{
227 return acos( angle_cos(p) );
236 inline const laPoint3 operator+(
const laPoint3 &pt1,
const laPoint3 &pt2)
237 {
return laPoint3( pt1(0)+pt2(0), pt1(1)+pt2(1), pt1(2)+pt2(2) ); };
239 inline const laPoint3 operator-(
const laPoint3 &pt1,
const laPoint3 &pt2)
240 {
return laPoint3( pt1(0)-pt2(0), pt1(1)-pt2(1), pt1(2)-pt2(2) ); };
242 inline const laPoint3 operator*(
const laPoint3 &pt,
const double &a)
243 {
return laPoint3( pt(0)*a, pt(1)*a, pt(2)*a ); };
245 inline const laPoint3 operator/(
const laPoint3 &pt,
const double &a)
246 {
return laPoint3( pt(0)/a, pt(1)/a, pt(2)/a ); };
248 inline const laPoint3 operator*(
const double &a,
const laPoint3 &pt)
249 {
return laPoint3( a*pt(0), a*pt(1), a*pt(2) ); };
251 inline const laPoint3 operator/(
const double &a,
const laPoint3 &pt)
252 {
return laPoint3( a/pt(0), a/pt(1), a/pt(2) ); };
Interface for loadable objects.
Virtual interface for the Engine graphics renderer.