45 friend class laPoint3;
50 inline double& operator[] (
unsigned short n) {
return _v[n]; }
51 inline const double& operator() (
unsigned short n)
const{
return _v[n]; }
53 inline const double& x()
const{
return _v[0]; }
54 inline const double& y()
const{
return _v[1]; }
55 inline void x(
const double &ax) { _v[0] = ax; }
56 inline void y(
const double &ay) { _v[1] = ay; }
58 inline double* data() {
return _v; }
59 inline const double* cdata()
const{
return _v; }
64 laPoint2(
const double &x,
const double &y ) { _v[0] = x; _v[1] = y; }
66 laPoint2(
const double *v ) { _v[0] = v[0]; _v[1] = v[1]; }
72 inline const laPoint2& operator*=(
const double &m) { _v[0] *=m; _v[1] *=m;
return *
this; };
73 inline const laPoint2& operator/=(
const double &m) { _v[0] /=m; _v[1] /=m;
return *
this; };
74 inline const laPoint2& operator+=(
const laPoint2 &pt) { _v[0] += pt(0); _v[1] += pt(1);
return *
this; };
75 inline const laPoint2& operator-=(
const laPoint2 &pt) { _v[0] -= pt(0); _v[1] -= pt(1);
return *
this; };
76 inline const laPoint2& operator*=(
const laPoint2 &pt) { _v[0] *=pt(0); _v[1]*=pt(1);
return *
this; };
77 inline const laPoint2& operator/=(
const laPoint2 &pt) { _v[0] /=pt(0); _v[1]/=pt(1);
return *
this; };
81 inline double dot(
const laPoint2 &p)
const{
82 return x()*p.x() + y()*p.y();
88 inline double cross(
const laPoint2 &p)
const{
89 return x()*p.y() - y()*p.x();
94 inline double lenght()
const{
95 return sqrt( _v[0]*_v[0] + _v[1]*_v[1] );
98 inline double lenght_sq()
const{
99 return ( _v[0]*_v[0] + _v[1]*_v[1] );
104 inline void normalize(){
105 double len = lenght();
106 ASSERT(len!=0,
"Division by zero.");
119 {
return laPoint2( pt1(0)+pt2(0), pt1(1)+pt2(1) ); };
122 {
return laPoint2( pt1(0)-pt2(0), pt1(1)-pt2(1) ); };
125 {
return laPoint2( pt(0)*a, pt(1)*a ); };
128 {
return laPoint2( pt(0)/a, pt(1)/a ); };
131 {
return laPoint2( a*pt(0), a*pt(1) ); };
134 {
return laPoint2( a/pt(0), a/pt(1) ); };
145 inline double& operator[] (
unsigned short n) {
return _v[n]; }
146 inline const double& operator() (
unsigned short n)
const{
return _v[n]; }
148 inline const double& x()
const{
return _v[0]; }
149 inline const double& y()
const{
return _v[1]; }
150 inline const double& z()
const{
return _v[2]; }
151 inline void x(
const double &ax) { _v[0] = ax; }
152 inline void y(
const double &ay) { _v[1] = ay; }
153 inline void z(
const double &az) { _v[2] = az; }
155 inline double* data() {
return _v; }
156 inline const double* cdata()
const{
return _v; }
160 laPoint3() { _v[0]=_v[1]=_v[2]=0; };
161 laPoint3(
const double &x,
const double &y,
const double &z = 0) { _v[0] = x; _v[1] = y; _v[2] = z; }
162 laPoint3(
const laPoint3 &pt ) { _v[0]=pt(0); _v[1]=pt(1); _v[2]=pt(2); };
163 laPoint3(
const double *v ) { _v[0]=v[0]; _v[1]=v[1]; _v[2]=v[2]; }
166 laPoint3(
const laPoint2 &pt ) { _v[0]=pt(0); _v[1]=pt(1); _v[2]=0; }
172 inline const laPoint3& operator*=(
const double &m) { _v[0]*=m; _v[1]*=m; _v[2]*=m;
return *
this; };
173 inline const laPoint3& operator/=(
const double &m) { _v[0]/=m; _v[1]/=m; _v[2]/=m;
return *
this; };
174 inline const laPoint3& operator+=(
const laPoint3 &pt) { _v[0]+=pt(0); _v[1]+=pt(1); _v[2]+=pt(2);
return *
this; };
175 inline const laPoint3& operator-=(
const laPoint3 &pt) { _v[0]-=pt(0); _v[1]-=pt(1); _v[2]-=pt(2);
return *
this; };
176 inline const laPoint3& operator*=(
const laPoint3 &pt) { _v[0]*=pt(0); _v[1]*=pt(1); _v[2]*=pt(2);
return *
this; };
177 inline const laPoint3& operator/=(
const laPoint3 &pt) { _v[0]/=pt(0); _v[1]/=pt(1); _v[2]*=pt(2);
return *
this; };
181 inline double dot(
const laPoint3 &p)
const{
182 return _v[0]*p(0) + _v[1]*p(1) + _v[2]*p(2);
187 inline laPoint3 cross(
const laPoint3 &p)
const
189 return laPoint3( _v[1] * p(2) - _v[2] * p(1),
190 _v[2] * p(0) - _v[0] * p(2),
191 _v[0] * p(1) - _v[1] * p(0) );
196 inline double lenght()
const{
197 return sqrt( _v[0]*_v[0] + _v[1]*_v[1] + _v[2]*_v[2] );
200 inline double lenght_sq()
const{
201 return ( _v[0]*_v[0] + _v[1]*_v[1] + _v[2]*_v[2] );
206 inline void normalize(){
207 double len = lenght();
208 ASSERT(len!=0,
"Division by zero.");
215 inline double angle_cos(
const laPoint3 &p)
const{
216 return dot(p) / sqrt( lenght_sq() * p.lenght_sq() );
219 inline double angle(
const laPoint3 &p)
const{
220 return acos( angle_cos(p) );
229 inline const laPoint3 operator+(
const laPoint3 &pt1,
const laPoint3 &pt2)
230 {
return laPoint3( pt1(0)+pt2(0), pt1(1)+pt2(1), pt1(2)+pt2(2) ); };
232 inline const laPoint3 operator-(
const laPoint3 &pt1,
const laPoint3 &pt2)
233 {
return laPoint3( pt1(0)-pt2(0), pt1(1)-pt2(1), pt1(2)-pt2(2) ); };
235 inline const laPoint3 operator*(
const laPoint3 &pt,
const double &a)
236 {
return laPoint3( pt(0)*a, pt(1)*a, pt(2)*a ); };
238 inline const laPoint3 operator/(
const laPoint3 &pt,
const double &a)
239 {
return laPoint3( pt(0)/a, pt(1)/a, pt(2)/a ); };
241 inline const laPoint3 operator*(
const double &a,
const laPoint3 &pt)
242 {
return laPoint3( a*pt(0), a*pt(1), a*pt(2) ); };
244 inline const laPoint3 operator/(
const double &a,
const laPoint3 &pt)
245 {
return laPoint3( a/pt(0), a/pt(1), a/pt(2) ); };
Interface for loadable objects.
Virtual interface for the Engine graphics renderer.