20 template <
typename _Scalar,
int _Rows,
int _Cols,
int _Options,
int _MaxRows,
int _MaxCols >
254 vec3d(
double xx,
double yy,
double zz );
256 vec3d(
const vec3d& a );
258 vec3d(
const threed_point_type &a );
260 vec3d(
const double a[3] );
261 vec3d(
const float a[3] );
262 vec3d(
const std::vector<double> &a );
264 vec3d& operator=(
const vec3d& a );
265 vec3d& operator=(
const vec2d& a );
266 vec3d& operator=(
double a );
267 vec3d& operator=(
const threed_point_type &a );
269 double& operator [] (
int i )
273 const double& operator [] (
int i )
const
306 vec3d&
set_xyz(
double xx,
double yy,
double zz );
308 vec3d& set_vec(
const std::vector<double> &a );
309 vec3d& set_arr(
const double a[] );
310 vec3d& set_arr(
const float a[] );
387 vec3d& set_refx(
const vec3d &a );
388 vec3d& set_refy(
const vec3d &a );
389 vec3d& set_refz(
const vec3d &a );
392 void get_pnt(
double pnt[3] )
const
398 void get_pnt(
float pnt[3] )
const
400 pnt[0] = ( float )v[0];
401 pnt[1] = ( float )v[1];
402 pnt[2] = ( float )v[2];
404 void get_pnt( threed_point_type &pnt )
const;
523 void Transform(
const Matrix4d &m );
524 void FlipNormal() {};
820 void offset_i(
double offset,
int idir )
856 return( vec3d( v[0], v[1], -v[2] ) );
889 return( vec3d( v[0], -v[1], v[2] ) );
922 return( vec3d( -v[0], v[1], v[2] ) );
925 vec3d swap_xy()
const
927 return(
vec3d( v[1], v[0], v[2] ) );
929 vec3d swap_xz()
const
931 return( vec3d( v[2], v[1], v[0] ) );
933 vec3d swap_yz()
const
935 return( vec3d( v[0], v[2], v[1] ) );
939 friend vec3d
operator+(
const vec3d& a,
const vec3d& b );
940 friend vec3d
operator-(
const vec3d& a,
const vec3d& b );
942 friend vec3d
operator*(
double b,
const vec3d& a );
943 friend vec3d
operator*(
const vec3d& a,
const vec3d& b );
945 vec3d& operator+=(
const vec3d& b );
946 vec3d& operator-=(
const vec3d& b );
947 vec3d& operator*=(
double b );
948 vec3d& operator+=(
double b[] );
949 vec3d& operator-=(
double b[] );
950 vec3d& operator+=(
float b[] );
951 vec3d& operator-=(
float b[] );
953 friend vec3d
operator-(
const vec3d & in );
955 friend bool operator==(
const vec3d &a,
const vec3d& b );
956 friend bool operator!=(
const vec3d &a,
const vec3d& b );
961 friend double dist(
const vec3d& a,
const vec3d& b );
995 double magsq()
const;
1033 int major_comp()
const;
1034 int minor_comp()
const;
1038 bool isfinite()
const;
1040 void print(
const char* label =
"" )
const;
1042 friend double dot(
const vec3d& a,
const vec3d& b );
1043 friend vec3d
cross(
const vec3d& a,
const vec3d& b );
1044 friend double angle(
const vec3d& a,
const vec3d& b );
1045 friend double signed_angle(
const vec3d& a,
const vec3d& b,
const vec3d& ref );
1047 friend double radius_of_circle(
const vec3d& p1,
const vec3d& p2,
const vec3d& p3 );
1048 friend void center_of_circle(
const vec3d& p1,
const vec3d& p2,
const vec3d& p3, vec3d& center );
1049 friend bool triangle_plane_intersect_test(
const vec3d& org,
const vec3d& norm,
const vec3d& p1,
const vec3d& p2,
const vec3d& p3 );
1050 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 );
1051 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 );
1052 friend bool plane_plane_intersection(
const vec3d &p0,
const vec3d &n0,
const vec3d &p1,
const vec3d &n1, vec3d &p, vec3d &v );
1053 friend double angle_pnt_2_plane(
const vec3d& ptplane, vec3d norm,
const vec3d& ptaxis, vec3d axis,
const vec3d &pt,
int ccw, vec3d &prot );
1054 friend double signed_dist_pnt_2_plane(
const vec3d& org,
const vec3d& norm,
const vec3d& pnt );
1055 friend double dist_pnt_2_plane(
const vec3d& org,
const vec3d& norm,
const vec3d& pnt );
1056 friend double dist_pnt_2_line(
const vec3d& line_pt1,
const vec3d& line_pt2,
const vec3d& pnt );
1057 friend double dist_pnt_2_ray(
const vec3d& line_pt1,
const vec3d& dir_unit_vec,
const vec3d& pnt );
1059 friend vec3d proj_u_on_v(
const vec3d& u,
const vec3d& v );
1060 friend vec3d proj_pnt_on_line_seg(
const vec3d& line_pt1,
const vec3d& line_pt2,
const vec3d& pnt );
1061 friend vec3d proj_pnt_on_ray(
const vec3d& line_pt1,
const vec3d& line_dir,
const vec3d& pnt );
1062 friend vec3d proj_pnt_on_line(
const vec3d& line_pt1,
const vec3d& line_pt2,
const vec3d& pnt );
1063 friend vec3d proj_pnt_to_plane(
const vec3d& org,
const vec3d& plane_ln1,
const vec3d& plane_ln2,
const vec3d& pnt );
1064 friend vec3d proj_vec_to_plane(
const vec3d& vec,
const vec3d& norm );
1065 friend int tri_seg_intersect(
const vec3d& A,
const vec3d& B,
const vec3d& C,
const vec3d& D,
const vec3d& E,
1066 double& u,
double& w,
double& t );
1067 friend int tri_ray_intersect(
const vec3d& A,
const vec3d& B,
const vec3d& C,
const vec3d& D,
const vec3d& E,
1068 double& u,
double& w,
double& t );
1069 friend int plane_ray_intersect(
const vec3d& A,
const vec3d& B,
const vec3d& C,
const vec3d& D,
const vec3d& E,
double& t );
1070 friend int plane_ray_intersect(
const vec3d& orig,
const vec3d& norm,
const vec3d& D,
const vec3d& E,
double& t );
1071 friend int ray_ray_intersect(
const vec3d& A,
const vec3d& B,
const vec3d& C,
const vec3d& D, vec3d& int_pnt1, vec3d& int_pnt2 );
1072 friend double tetra_volume(
const vec3d& A,
const vec3d& B,
const vec3d& C );
1073 friend double area(
const vec3d& A,
const vec3d& B,
const vec3d& C );
1074 friend double poly_area(
const std::vector< vec3d > & pnt_vec );
1075 friend double dist3D_Segment_to_Segment(
const vec3d& S1P0,
const vec3d& S1P1,
const vec3d& S2P0,
const vec3d& S2P1 );
1076 friend double dist3D_Segment_to_Segment(
const vec3d& S1P0,
const vec3d& S1P1,
const vec3d& S2P0,
const vec3d& S2P1,
1077 double* Lt, vec3d* Ln,
double* St, vec3d* Sn );
1078 friend double nearSegSeg(
const vec3d& L0,
const vec3d& L1,
const vec3d& S0,
const vec3d& S1,
double* Lt, vec3d* Ln,
double* St, vec3d* Sn );
1079 friend double pointLineDistSquared(
const vec3d & p,
const vec3d& lp0,
const vec3d& lp1,
double &t, vec3d &pon );
1080 friend double pointSegDistSquared(
const vec3d& p,
const vec3d& sp0,
const vec3d& sp1,
double &t, vec3d &pon );
1081 friend vec3d point_on_line(
const vec3d & lp0,
const vec3d & lp1,
const double & t );
1083 friend vec2d MapToPlane(
const vec3d & p,
const vec3d & planeOrig,
const vec3d & planeVec1,
const vec3d & planeVec2 );
1084 friend vec3d MapFromPlane(
const vec2d & uw,
const vec3d & planeOrig,
const vec3d & planeVec1,
const vec3d & planeVec2 );
1086 friend int plane_half_space(
const vec3d & planeOrig,
const vec3d & planeNorm,
const vec3d & pnt );
1088 friend bool line_line_intersect(
const vec3d & p1,
const vec3d & p2,
const vec3d & p3,
const vec3d & p4,
double* s,
double* t );
1092 friend bool PtInTri(
const vec3d & v0,
const vec3d & v1,
const vec3d & v2,
const vec3d & p );
1093 friend vec3d BarycentricWeights(
const vec3d & v0,
const vec3d & v1,
const vec3d & v2,
const vec3d & p );
1094 friend void BilinearWeights(
const vec3d & p0,
const vec3d & p1,
const vec3d & p, std::vector< double > & weights );
1095 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 );
1096 friend double pnt_tri_min_dist(
const vec3d & v0,
const vec3d & v1,
const vec3d & v2,
const vec3d & pnt, vec3d &pnearest );
1098 friend vec3d slerp(
const vec3d& a,
const vec3d& b,
const double &t );
1099 friend void printpt(
const vec3d & v );
1100 friend vec3d ToSpherical(
const vec3d & v );
1101 friend vec3d ToSpherical2(
const vec3d & v,
const vec3d & vdet );
1102 friend vec3d ToCartesian(
const vec3d & v );
1104 friend void FitPlane(
const std::vector < vec3d > & pts, vec3d & cen, vec3d & norm );
1442string to_string(
const vec3d &v);
1447void FitPlane(
const std::vector < vec3d > & pts,
vec3d & cen,
vec3d & norm );
1450vec3d compsum(
const std::vector < vec3d > &x );
1454template <
typename T >
1455T compsum(
const std::vector < T > &x )
1460 for (
int i = 0; i < x.size(); i++ )
1463 if ( std::abs( sum ) >= std::abs( x[i] ) )
1465 e += ( sum - t ) + x[i];
1469 e += ( x[i] - t ) + sum;
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 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)
double signed_angle(const vec3d &a, const vec3d &b, const vec3d &ref)
vec3d operator+(const vec3d &a, const vec3d &b)
vec3d operator*(const vec3d &a, double b)
vec3d operator/(const vec3d &a, double b)
vec3d cross(const vec3d &a, const vec3d &b)
double angle(const vec3d &a, const vec3d &b)
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)