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; }
79 const double &
operator[](
int i )
const {
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] ) );
215 return( p[0]*p[0] + p[1]*p[1] + p[2]*p[2] );
228 void save( std::ostream &os )
const {
261 return( vec.
norm2() );
266 return(
Vec3D( vec1[1] * vec2[2] - vec1[2] * vec2[1],
267 vec1[2] * vec2[0] - vec1[0] * vec2[2],
268 vec1[0] * vec2[1] - vec1[1] * vec2[0] ) );
274 return(
Vec3D( x*vec.p[0], x*vec.p[1], x*vec.p[2] ) );
280 os << std::setw(12) <<
to_string(vec[0]).substr(0,12) <<
" ";
281 os << std::setw(12) <<
to_string(vec[1]).substr(0,12) <<
" ";
282 os << std::setw(12) <<
to_string(vec[2]).substr(0,12);
294 Int3D() { l[0] = 0; l[1] = 0; l[2] = 0; }
295 Int3D( int32_t i ) { l[0] = i; l[1] = 0; l[2] = 0; }
296 Int3D( int32_t i, int32_t j ) { l[0] = i; l[1] = j; l[2] = 0; }
297 Int3D( int32_t i, int32_t j, int32_t k ) { l[0] = i; l[1] = j; l[2] = k; }
311 return(
Int3D( l[0] - i[0],
317 return(
Vec3D( x*l[0], x*l[1], x*l[2] ) );
323 if( l[0] != i.l[0] || l[1] != i.l[1] || l[2] != i.l[2] )
331 if( l[0] == i.l[0] && l[1] == i.l[1] && l[2] == i.l[2] )
336 void save( std::ostream &s )
const {
359 os << std::setw(12) <<
to_string(vec[0]).substr(0,12) <<
" ";
360 os << std::setw(12) <<
to_string(vec[1]).substr(0,12) <<
" ";
361 os << std::setw(12) <<
to_string(vec[2]).substr(0,12);