Go to the documentation of this file.00001
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043 #ifndef TRANSFORMATION_HPP
00044 #define TRANSFORMATION_HPP 1
00045
00046
00047 #include <string.h>
00048 #include "vec3d.hpp"
00049 #include "vec4d.hpp"
00050
00051
00059 class Transformation
00060 {
00061
00062 double x[16];
00063
00064
00065
00066
00067
00068
00069 public:
00070
00073 Transformation();
00074
00077 Transformation( double x11, double x12, double x13, double x14,
00078 double x21, double x22, double x23, double x24,
00079 double x31, double x32, double x33, double x34,
00080 double x41, double x42, double x43, double x44 );
00081
00084 Transformation( const Transformation &m );
00085
00088 Transformation( std::istream &is );
00089
00092 ~Transformation();
00093
00094
00095
00096
00097
00100 double &operator[]( int i ) {
00101 return( x[i] );
00102 }
00103
00106 const double &operator[]( int i ) const {
00107 return( x[i] );
00108 }
00109
00112 double determinant( void ) const;
00113
00116 Transformation inverse( void ) const;
00117
00120 const Transformation &operator*=( double s );
00121
00130 Transformation operator*( const Transformation &m ) const;
00131
00136 Vec4D operator*( const Vec4D &v ) const;
00137
00143 Vec4D operator%( const Vec4D &v ) const;
00144
00145
00146
00147
00148
00151 Vec4D transform( const Vec4D &xin ) const;
00152
00153
00154
00155
00161 Vec3D transform_point( const Vec3D &xin ) const;
00162
00172 Vec3D inv_transform_point( const Vec3D &xin ) const;
00173
00174
00175
00176
00182 Vec3D transform_vector( const Vec3D &xin ) const;
00183
00193 Vec3D inv_transform_vector( const Vec3D &xin ) const;
00194
00195
00196
00197
00202 void reset( void );
00203
00209 void translate( const Vec3D &d );
00210
00216 void scale( const Vec3D &s );
00217
00225 void rotate_x( double a );
00226
00234 void rotate_y( double a );
00235
00243 void rotate_z( double a );
00244
00247 static Transformation unity( void );
00248
00251 static Transformation translation( const Vec3D &d );
00252
00255 static Transformation scaling( const Vec3D &s );
00256
00259 static Transformation rotation_x( double a );
00260
00263 static Transformation rotation_y( double a );
00264
00267 static Transformation rotation_z( double a );
00268
00271 friend std::ostream &operator<<( std::ostream &os, const Transformation &t );
00272
00275 void save( const std::string &filename ) const;
00276
00279 void save( std::ostream &os ) const;
00280
00283 void debug_print( std::ostream &os ) const;
00284 };
00285
00286
00287
00288
00289 #endif
00290
00291