64 Vec3D() { p[0] = 0.0; p[1] = 0.0; p[2] = 0.0; }
65 Vec3D(
double x ) { p[0] = x; p[1] = 0.0; p[2] = 0.0; }
66 Vec3D(
double x,
double y ) { p[0] = x; p[1] = y; p[2] = 0.0; }
67 Vec3D(
double x,
double y,
double z ) { p[0] = x; p[1] = y; p[2] = z; }
71 Vec3D( std::istream &s ) {
78 double &operator[](
int i ) {
return( p[i] ); }
79 const double &operator[](
int i )
const {
return( p[i] ); }
80 double &operator()(
int i ) {
return( p[i] ); }
81 const double &operator()(
int i )
const {
return( p[i] ); }
86 return(
Vec3D( p[0] + vec[0],
94 return(
Vec3D( p[0] - vec[0],
111 return( p[0] * vec[0] +
119 return(
Vec3D( x*p[0], x*p[1], x*p[2] ) );
125 return(
Vec3D( -p[0], -p[1], -p[2] ) );
165 bool approx(
const Vec3D &x,
double eps = 1.0e-6 )
const;
196 double inv_norm = 1.0/sqrt( p[0]*p[0] + p[1]*p[1] + p[2]*p[2] );
207 return( sqrt( p[0]*p[0] + p[1]*p[1] + p[2]*p[2] ) );
214 double max(
void )
const;
221 return( p[0]*p[0] + p[1]*p[1] + p[2]*p[2] );
234 void save( std::ostream &os )
const {
267 friend std::basic_ostream<wchar_t> &
operator<<( std::basic_ostream<wchar_t> &os,
const Vec3D &vec );
272 return( vec.
norm2() );
277 return( vec.
ssqr() );
282 return(
Vec3D( vec1[1] * vec2[2] - vec1[2] * vec2[1],
283 vec1[2] * vec2[0] - vec1[0] * vec2[2],
284 vec1[0] * vec2[1] - vec1[1] * vec2[0] ) );
290 return(
Vec3D( x*vec.p[0], x*vec.p[1], x*vec.p[2] ) );
294 inline std::ostream &operator<<( std::ostream &os,
const Vec3D &vec )
296 os << std::setw(12) << vec[0] <<
" "
297 << std::setw(12) << vec[1] <<
" "
298 << std::setw(12) << vec[2];
306 inline std::basic_ostream<wchar_t> &operator<<( std::basic_ostream<wchar_t> &os,
const Vec3D &vec )
308 os << std::setw(12) << vec[0] <<
" "
309 << std::setw(12) << vec[1] <<
" "
310 << std::setw(12) << vec[2];
325 Int3D() { l[0] = 0; l[1] = 0; l[2] = 0; }
326 Int3D( int32_t i ) { l[0] = i; l[1] = 0; l[2] = 0; }
327 Int3D( int32_t i, int32_t j ) { l[0] = i; l[1] = j; l[2] = 0; }
328 Int3D( int32_t i, int32_t j, int32_t k ) { l[0] = i; l[1] = j; l[2] = k; }
329 Int3D( std::istream &s ) {
336 int32_t &operator[](
int i ) {
return( l[i] ); }
337 const int32_t &operator[](
int i )
const {
return( l[i] ); }
338 int32_t &operator()(
int i ) {
return( l[i] ); }
339 const int32_t &operator()(
int i )
const {
return( l[i] ); }
344 return(
Int3D( l[0] + i[0],
352 return(
Int3D( l[0] - i[0],
357 Int3D operator*(
int i ) {
358 return(
Int3D( i*l[0], i*l[1], i*l[2] ) );
361 Vec3D operator*(
double x ) {
362 return(
Vec3D( x*l[0], x*l[1], x*l[2] ) );
368 if( l[0] != i.l[0] || l[1] != i.l[1] || l[2] != i.l[2] )
376 if( l[0] == i.l[0] && l[1] == i.l[1] && l[2] == i.l[2] )
384 int32_t
max(
void )
const;
386 void save( std::ostream &s )
const {
392 friend Vec3D operator*(
double x,
const Int3D &i );
393 friend Int3D operator*(
int x,
const Int3D &i );
394 friend std::ostream &operator<<( std::ostream &os,
const Int3D &vec );
395 friend std::basic_ostream<wchar_t> &operator<<( std::basic_ostream<wchar_t> &os,
const Int3D &vec );
419 inline std::ostream &operator<<( std::ostream &os,
const Int3D &vec )
421 os << std::setw(12) << vec[0] <<
" "
422 << std::setw(12) << vec[1] <<
" "
423 << std::setw(12) << vec[2];
431 inline std::basic_ostream<wchar_t> &operator<<( std::basic_ostream<wchar_t> &os,
const Int3D &vec )
433 os << std::setw(12) << vec[0] <<
" "
434 << std::setw(12) << vec[1] <<
" "
435 << std::setw(12) << vec[2];
3D Integer vector class.
Definition: vec3d.hpp:320
bool operator!=(const Int3D &i) const
Inequality test.
Definition: vec3d.hpp:367
Int3D operator+(const Int3D &i) const
Integer vector addition.
Definition: vec3d.hpp:343
Int3D operator-(const Int3D &i)
Integer vector difference.
Definition: vec3d.hpp:351
bool operator==(const Int3D &i) const
Equality test.
Definition: vec3d.hpp:375
int32_t max(void) const
Returns maximum component of vector.
Definition: vec3d.cpp:92
Three dimensional vector.
Definition: vec3d.hpp:58
void normalize(void)
Normalize vector.
Definition: vec3d.hpp:195
Vec3D operator-(const Vec3D &vec) const
Vector difference
Definition: vec3d.hpp:93
Vec3D operator*(double x) const
Vector scaling.
Definition: vec3d.hpp:118
friend Vec3D cross(const Vec3D &vec1, const Vec3D &vec2)
Cross product.
Definition: vec3d.hpp:281
double operator*(const Vec3D &vec) const
Dot product.
Definition: vec3d.hpp:110
Vec3D & operator/=(double x)
Vector scaling with divisor.
Definition: vec3d.hpp:139
Vec3D & operator*=(double x)
Vector scaling.
Definition: vec3d.hpp:130
bool approx(const Vec3D &x, double eps=1.0e-6) const
Approximate equality test.
Definition: vec3d.cpp:108
Vec3D & operator+=(const Vec3D &vec)
Vector accumulation
Definition: vec3d.hpp:101
static Vec3D standard_basis(int i)
Returns standard basis vector i.
Definition: vec3d.cpp:134
Vec3D operator-(void) const
Unary minus.
Definition: vec3d.hpp:124
double norm2(void) const
Returns 2-norm of vector.
Definition: vec3d.hpp:206
int min_element(void) const
Returns the index of element with minimum magnitude (abs).
Definition: vec3d.cpp:120
void abs(void)
Calculate absolute value of each component.
Definition: vec3d.hpp:187
bool operator!=(const Vec3D &x) const
Inequality test.
Definition: vec3d.cpp:55
bool operator==(const Vec3D &x) const
Equality test.
Definition: vec3d.cpp:65
double max(void) const
Returns inf-norm of vector.
Definition: vec3d.cpp:76
double ssqr(void) const
Returns square of 2-norm of vector.
Definition: vec3d.hpp:220
Vec3D & operator=(const double &x)
Assignment of every coordinate.
Definition: vec3d.hpp:178
Vec3D operator+(const Vec3D &vec) const
Vector addition
Definition: vec3d.hpp:85
friend Vec3D operator*(double x, const class Int3D &i)
Vector scaling for integer vector.
Vec3D & operator=(const Vec3D &x)
Assignment.
Definition: vec3d.hpp:169
Vec3D arb_perpendicular(void) const
Returns arbitrary vector perpendicular to input vector.
Definition: vec3d.cpp:142
friend std::ostream & operator<<(std::ostream &os, const Vec3D &vec)
Outputting to stream.
Definition: vec3d.hpp:294
void save(std::ostream &os) const
Saves data to stream os.
Definition: vec3d.hpp:234
Homogenous vector for three dimensional space.
Definition: vec4d.hpp:67
void write_double(std::ostream &s, double value)
Write double value into stream os.
Definition: file.cpp:88
void write_int32(std::ostream &s, int32_t value)
Write int32_t value into stream os.
Definition: file.cpp:70
double read_double(std::istream &s)
Readd double from stream is.
Definition: file.cpp:157
int32_t read_int32(std::istream &s)
Read int32_t from stream is.
Definition: file.cpp:135
Bindary file writing and reading tools.
double norm2(const Vector &vec)
Definition: mvector.cpp:474
double ssqr(const Vector &vec)
Definition: mvector.cpp:487
Homogenous vectors for three dimensional space.
Vec4D operator*(double x, const Vec4D &vec)
Definition: vec4d.hpp:287
Vec4D cross(const Vec4D &vec1, const Vec4D &vec2)
Definition: vec4d.hpp:279