73 Vec4D() { p[0] = 0.0; p[1] = 0.0; p[2] = 0.0; p[3] = 0.0; }
74 Vec4D(
double x ) { p[0] = x; p[1] = 0.0; p[2] = 0.0; p[3] = 0.0; }
75 Vec4D(
double x,
double y ) { p[0] = x; p[1] = y; p[2] = 0.0; p[3] = 0.0; }
76 Vec4D(
double x,
double y,
double z ) { p[0] = x; p[1] = y; p[2] = z; p[3] = 0.0; }
77 Vec4D(
double x,
double y,
double z,
double w ) { p[0] = x; p[1] = y; p[2] = z; p[3] = w; }
90 const double &
operator[](
int i )
const {
return( p[i] ); }
92 const double &
operator()(
int i )
const {
return( p[i] ); }
100 return(
Vec4D( p[0] + vec[0],
103 (p[2] == vec[2] ? 0.0 : 1.0) ) );
112 return(
Vec4D( p[0] - vec[0],
115 (p[2] == vec[2] ? 0.0 : 1.0) ) );
135 return( p[0] * vec[0] +
145 return(
Vec4D( x*p[0], x*p[1], x*p[2], p[3] ) );
176 if( p[0] != x.p[0] || p[1] != x.p[1] || p[2] != x.p[2] || p[3] != x.p[3] )
186 if( p[0] == x.p[0] && p[1] == x.p[1] && p[2] == x.p[2] && p[3] == x.p[3] )
207 double inv_w = 1.0/p[3];
219 double inv_norm = 1.0/sqrt( p[0]*p[0] + p[1]*p[1] + p[2]*p[2] );
231 return( sqrt( p[0]*p[0] + p[1]*p[1] + p[2]*p[2] ) );
239 return( p[0]*p[0] + p[1]*p[1] + p[2]*p[2] );
242 void save( std::ostream &s )
const {
272 return( vec.
norm2() );
276 return(
Vec4D( vec1[1] * vec2[2] - vec1[2] * vec2[1],
277 vec1[2] * vec2[0] - vec1[0] * vec2[2],
278 vec1[0] * vec2[1] - vec1[1] * vec2[0],
285 return(
Vec4D( x*vec[0], x*vec[1], x*vec[2], vec[3] ) );
291 os << std::setw(12) <<
to_string(vec[0]).substr(0,12) <<
" ";
292 os << std::setw(12) <<
to_string(vec[1]).substr(0,12) <<
" ";
293 os << std::setw(12) <<
to_string(vec[2]).substr(0,12) <<
" ";
294 os << std::setw(12) <<
to_string(vec[3]).substr(0,12);