20 template <
typename _Scalar,
int _Rows,
int _Cols,
int _Options,
int _MaxRows,
int _MaxCols >
251 vec3d(
const vec3d& a );
254 vec3d(
double xx,
double yy,
double zz );
256 vec3d(
const threed_point_type &a );
258 vec3d(
const double a[3] );
259 vec3d(
const float a[3] );
260 vec3d(
const std::vector<double> &a );
262 vec3d& operator=(
const vec2d& a );
263 vec3d& operator=(
double a );
264 vec3d& operator=(
const threed_point_type &a );
266 double& operator [] (
int i )
270 const double& operator [] (
int i )
const
302 vec3d&
set_xyz(
double xx,
double yy,
double zz );
325 vec3d&
set_vec(
const std::vector<double> &a );
336 vec3d& set_arr(
const double a[] );
337 vec3d& set_arr(
const float a[] );
490 void get_pnt(
double pnt[3] )
const
496 void get_pnt(
float pnt[3] )
const
498 pnt[0] = ( float )v[0];
499 pnt[1] = ( float )v[1];
500 pnt[2] = ( float )v[2];
502 void get_pnt( threed_point_type &pnt )
const;
606 void Transform(
const Matrix4d &m );
612 void FlipNormal() {};
958 return( vec3d( v[0], v[1], -v[2] ) );
991 return( vec3d( v[0], -v[1], v[2] ) );
1024 return( vec3d( -v[0], v[1], v[2] ) );
1027 vec3d swap_xy()
const
1029 return(
vec3d( v[1], v[0], v[2] ) );
1031 vec3d swap_xz()
const
1033 return( vec3d( v[2], v[1], v[0] ) );
1035 vec3d swap_yz()
const
1037 return( vec3d( v[0], v[2], v[1] ) );
1044 friend vec3d
operator*(
double b,
const vec3d& a );
1047 vec3d& operator+=(
const vec3d& b );
1048 vec3d& operator-=(
const vec3d& b );
1049 vec3d& operator*=(
double b );
1050 vec3d& operator+=(
double b[] );
1051 vec3d& operator-=(
double b[] );
1052 vec3d& operator+=(
float b[] );
1053 vec3d& operator-=(
float b[] );
1055 friend vec3d
operator-(
const vec3d & in );
1057 friend bool operator==(
const vec3d &a,
const vec3d& b );
1058 friend bool operator!=(
const vec3d &a,
const vec3d& b );
1063 friend double dist(
const vec3d& a,
const vec3d& b );
1255 void print(
const char* label =
"" )
const;
1257 friend double dot(
const vec3d& a,
const vec3d& b );
1258 friend vec3d
cross(
const vec3d& a,
const vec3d& b );
1259 friend double angle(
const vec3d& a,
const vec3d& b );
1260 friend double signed_angle(
const vec3d& a,
const vec3d& b,
const vec3d& ref );
1262 friend double radius_of_circle(
const vec3d& p1,
const vec3d& p2,
const vec3d& p3 );
1263 friend void center_of_circle(
const vec3d& p1,
const vec3d& p2,
const vec3d& p3, vec3d& center );
1264 friend bool triangle_plane_intersect_test(
const vec3d& org,
const vec3d& norm,
const vec3d& p1,
const vec3d& p2,
const vec3d& p3 );
1265 friend double triangle_plane_minimum_dist(
const vec3d& org,
const vec3d& norm,
const vec3d& p1,
const vec3d& p2,
const vec3d& p3, vec3d &pa, vec3d &pb );
1266 friend double triangle_plane_maximum_dist(
const vec3d& org,
const vec3d& norm,
const vec3d& p1,
const vec3d& p2,
const vec3d& p3, vec3d &pa, vec3d &pb );
1267 friend bool plane_plane_intersection(
const vec3d &p0,
const vec3d &n0,
const vec3d &p1,
const vec3d &n1, vec3d &p, vec3d &v );
1268 friend double angle_pnt_2_plane(
const vec3d& ptplane, vec3d norm,
const vec3d& ptaxis, vec3d axis,
const vec3d &pt,
int ccw, vec3d &prot );
1269 friend void angle_pnt_2_plane(
const vec3d& ptplane, vec3d norm,
const vec3d& ptaxis, vec3d axis,
const vec3d &pt,
int ccw, vec3d &prot1, vec3d &prot2,
double &theta1,
double &theta2 );
1270 friend double signed_dist_pnt_2_plane(
const vec3d& org,
const vec3d& norm,
const vec3d& pnt );
1271 friend double dist_pnt_2_plane(
const vec3d& org,
const vec3d& norm,
const vec3d& pnt );
1272 friend double dist_pnt_2_line(
const vec3d& line_pt1,
const vec3d& line_pt2,
const vec3d& pnt );
1273 friend double dist_pnt_2_ray(
const vec3d& line_pt1,
const vec3d& dir_unit_vec,
const vec3d& pnt );
1275 friend vec3d proj_u_on_v(
const vec3d& u,
const vec3d& v );
1276 friend vec3d proj_pnt_on_line_seg(
const vec3d& line_pt1,
const vec3d& line_pt2,
const vec3d& pnt );
1277 friend vec3d proj_pnt_on_ray(
const vec3d& line_pt1,
const vec3d& line_dir,
const vec3d& pnt );
1278 friend vec3d proj_pnt_on_ray(
const vec3d& line_pt1,
const vec3d& line_dir,
const vec3d& pnt,
double &t );
1279 friend vec3d proj_pnt_on_line(
const vec3d& line_pt1,
const vec3d& line_pt2,
const vec3d& pnt );
1280 friend vec3d proj_pnt_to_plane(
const vec3d& org,
const vec3d& plane_ln1,
const vec3d& plane_ln2,
const vec3d& pnt );
1281 friend vec3d proj_vec_to_plane(
const vec3d& vec,
const vec3d& norm );
1282 friend int tri_seg_intersect(
const vec3d& A,
const vec3d& B,
const vec3d& C,
const vec3d& D,
const vec3d& E,
1283 double& u,
double& w,
double& t );
1284 friend int tri_ray_intersect(
const vec3d& A,
const vec3d& B,
const vec3d& C,
const vec3d& D,
const vec3d& E,
1285 double& u,
double& w,
double& t );
1286 friend int plane_ray_intersect(
const vec3d& A,
const vec3d& B,
const vec3d& C,
const vec3d& D,
const vec3d& E,
double& t );
1287 friend int plane_ray_intersect(
const vec3d& orig,
const vec3d& norm,
const vec3d& D,
const vec3d& E,
double& t );
1288 friend int ray_ray_intersect(
const vec3d& A,
const vec3d& B,
const vec3d& C,
const vec3d& D, vec3d& int_pnt1, vec3d& int_pnt2 );
1289 friend double tetra_volume(
const vec3d& A,
const vec3d& B,
const vec3d& C );
1290 friend double area(
const vec3d& A,
const vec3d& B,
const vec3d& C );
1291 friend double poly_area(
const std::vector< vec3d > & pnt_vec );
1292 friend double dist3D_Segment_to_Segment(
const vec3d& S1P0,
const vec3d& S1P1,
const vec3d& S2P0,
const vec3d& S2P1 );
1293 friend double dist3D_Segment_to_Segment(
const vec3d& S1P0,
const vec3d& S1P1,
const vec3d& S2P0,
const vec3d& S2P1,
1294 double* Lt, vec3d* Ln,
double* St, vec3d* Sn );
1295 friend double nearSegSeg(
const vec3d& L0,
const vec3d& L1,
const vec3d& S0,
const vec3d& S1,
double* Lt, vec3d* Ln,
double* St, vec3d* Sn );
1296 friend double pointLineDistSquared(
const vec3d & p,
const vec3d& lp0,
const vec3d& lp1,
double &t, vec3d &pon );
1297 friend double pointSegDistSquared(
const vec3d& p,
const vec3d& sp0,
const vec3d& sp1,
double &t, vec3d &pon );
1298 friend vec3d point_on_line(
const vec3d & lp0,
const vec3d & lp1,
const double & t );
1300 friend vec2d MapToPlane(
const vec3d & p,
const vec3d & planeOrig,
const vec3d & planeVec1,
const vec3d & planeVec2 );
1301 friend vec3d MapFromPlane(
const vec2d & uw,
const vec3d & planeOrig,
const vec3d & planeVec1,
const vec3d & planeVec2 );
1303 friend int plane_half_space(
const vec3d & planeOrig,
const vec3d & planeNorm,
const vec3d & pnt );
1305 friend bool line_line_intersect(
const vec3d & p1,
const vec3d & p2,
const vec3d & p3,
const vec3d & p4,
double* s,
double* t );
1309 friend bool PtInTri(
const vec3d & v0,
const vec3d & v1,
const vec3d & v2,
const vec3d & p );
1310 friend vec3d BarycentricWeights(
const vec3d & v0,
const vec3d & v1,
const vec3d & v2,
const vec3d & p );
1311 friend void BilinearWeights(
const vec3d & p0,
const vec3d & p1,
const vec3d & p, std::vector< double > & weights );
1312 friend double tri_tri_min_dist(
const vec3d & v0,
const vec3d & v1,
const vec3d & v2,
const vec3d & v3,
const vec3d & v4,
const vec3d & v5, vec3d &p1, vec3d &p2 );
1313 friend double pnt_tri_min_dist(
const vec3d & v0,
const vec3d & v1,
const vec3d & v2,
const vec3d & pnt, vec3d &pnearest );
1315 friend vec3d slerp(
const vec3d& a,
const vec3d& b,
const double &t );
1316 friend void printpt(
const vec3d & v );
1317 friend vec3d ToSpherical(
const vec3d & v );
1318 friend vec3d ToSpherical2(
const vec3d & v,
const vec3d & vdet );
1319 friend vec3d ToCartesian(
const vec3d & v );
1321 friend void FitPlane(
const std::vector < vec3d > & pts, vec3d & cen, vec3d & norm );
1738template <
typename T >
1739T
compsum(
const std::vector < T > &x )
1744 for (
int i = 0; i < x.size(); i++ )
1747 if ( std::abs( sum ) >= std::abs( x[i] ) )
1749 e += ( sum - t ) + x[i];
1753 e += ( x[i] - t ) + sum;
1762bool raySphereIntersectionFromInside (
const vec3d &p,
const vec3d &v,
const vec3d &c,
double r,
vec3d &x );
friend vec3d operator-(const vec3d &a, const vec3d &b)
friend double dot(const vec3d &a, const vec3d &b)
vec3d & set_xyz(double xx, double yy, double zz)
void offset_z(double offset)
void scale_z(double scale)
friend void FitPlane(const std::vector< vec3d > &pts, vec3d &cen, vec3d &norm)
friend double signed_angle(const vec3d &a, const vec3d &b, const vec3d &ref)
void offset_x(double offset)
void rotate_x(double theta)
void rotate_z(double theta)
void scale_y(double scale)
friend vec3d operator+(const vec3d &a, const vec3d &b)
friend vec3d operator*(const vec3d &a, double b)
friend vec3d operator/(const vec3d &a, double b)
friend vec3d operator*(const vec3d &a, const vec3d &b)
friend vec3d cross(const vec3d &a, const vec3d &b)
friend double angle(const vec3d &a, const vec3d &b)
void offset_y(double offset)
void scale_x(double scale)
friend double dist(const vec3d &a, const vec3d &b)
friend double cos_angle(const vec3d &a, const vec3d &b)
friend vec3d RotateArbAxis(const vec3d &p, double theta, const vec3d &r)
void rotate_y(double theta)
friend double dist_squared(const vec3d &a, const vec3d &b)
vec3d operator-(const vec3d &a, const vec3d &b)
double dot(const vec3d &a, const vec3d &b)
void FitPlane(const std::vector< vec3d > &pts, vec3d &cen, vec3d &norm)
double signed_angle(const vec3d &a, const vec3d &b, const vec3d &ref)
vec3d & set_refx(const vec3d &a)
vec3d & set_refz(const vec3d &a)
vec3d compsum(const std::vector< vec3d > &x)
vec3d operator+(const vec3d &a, const vec3d &b)
vec3d operator*(const vec3d &a, double b)
vec3d operator/(const vec3d &a, double b)
vec3d & set_refy(const vec3d &a)
void print(const char *label="") const
vec3d cross(const vec3d &a, const vec3d &b)
string to_string(const vec3d &v)
double angle(const vec3d &a, const vec3d &b)
vec3d & set_vec(const std::vector< double > &a)
void offset_i(double offset, int idir)
double dist(const vec3d &a, const vec3d &b)
double cos_angle(const vec3d &a, const vec3d &b)
vec3d RotateArbAxis(const vec3d &p, double theta, const vec3d &r)
double dist_squared(const vec3d &a, const vec3d &b)