19#include "eli/code_eli.hpp"
20typedef Eigen::Matrix< double, 1, 3 > threed_point_type;
247 vec3d(
double xx,
double yy,
double zz );
249 vec3d(
const vec3d& a );
251 vec3d(
const threed_point_type &a );
253 vec3d(
const double a[3] );
254 vec3d(
const float a[3] );
255 vec3d(
const std::vector<double> &a );
257 vec3d& operator=(
const vec3d& a );
258 vec3d& operator=(
const vec2d& a );
259 vec3d& operator=(
double a );
260 vec3d& operator=(
const threed_point_type &a );
262 double& operator [] (
int i )
266 const double& operator [] (
int i )
const
299 vec3d&
set_xyz(
double xx,
double yy,
double zz );
301 vec3d& set_vec(
const std::vector<double> &a );
302 vec3d& set_arr(
const double a[] );
303 vec3d& set_arr(
const float a[] );
380 vec3d& set_refx(
const vec3d &a );
381 vec3d& set_refy(
const vec3d &a );
382 vec3d& set_refz(
const vec3d &a );
385 void get_pnt(
double pnt[3] )
const
391 void get_pnt(
float pnt[3] )
const
393 pnt[0] = ( float )v[0];
394 pnt[1] = ( float )v[1];
395 pnt[2] = ( float )v[2];
397 void get_pnt( threed_point_type &pnt )
const
521 void Transform(
const Matrix4d &m );
522 void FlipNormal() {};
818 void offset_i(
double offset,
int idir )
854 return( vec3d( v[0], v[1], -v[2] ) );
887 return( vec3d( v[0], -v[1], v[2] ) );
920 return( vec3d( -v[0], v[1], v[2] ) );
923 vec3d swap_xy()
const
925 return(
vec3d( v[1], v[0], v[2] ) );
927 vec3d swap_xz()
const
929 return( vec3d( v[2], v[1], v[0] ) );
931 vec3d swap_yz()
const
933 return( vec3d( v[0], v[2], v[1] ) );
937 friend vec3d
operator+(
const vec3d& a,
const vec3d& b );
938 friend vec3d
operator-(
const vec3d& a,
const vec3d& b );
940 friend vec3d
operator*(
double b,
const vec3d& a );
941 friend vec3d
operator*(
const vec3d& a,
const vec3d& b );
943 vec3d& operator+=(
const vec3d& b );
944 vec3d& operator-=(
const vec3d& b );
945 vec3d& operator*=(
double b );
946 vec3d& operator+=(
double b[] );
947 vec3d& operator-=(
double b[] );
948 vec3d& operator+=(
float b[] );
949 vec3d& operator-=(
float b[] );
951 friend vec3d
operator-(
const vec3d & in );
953 friend bool operator==(
const vec3d &a,
const vec3d& b );
954 friend bool operator!=(
const vec3d &a,
const vec3d& b );
959 friend double dist(
const vec3d& a,
const vec3d& b );
993 double magsq()
const;
1031 int major_comp()
const;
1032 int minor_comp()
const;
1036 bool isfinite()
const;
1038 void print(
const char* label =
"" )
const;
1040 friend double dot(
const vec3d& a,
const vec3d& b );
1041 friend vec3d
cross(
const vec3d& a,
const vec3d& b );
1042 friend double angle(
const vec3d& a,
const vec3d& b );
1043 friend double signed_angle(
const vec3d& a,
const vec3d& b,
const vec3d& ref );
1045 friend double radius_of_circle(
const vec3d& p1,
const vec3d& p2,
const vec3d& p3 );
1046 friend void center_of_circle(
const vec3d& p1,
const vec3d& p2,
const vec3d& p3, vec3d& center );
1047 friend bool triangle_plane_intersect_test(
const vec3d& org,
const vec3d& norm,
const vec3d& p1,
const vec3d& p2,
const vec3d& p3 );
1048 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 );
1049 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 );
1050 friend bool plane_plane_intersection(
const vec3d &p0,
const vec3d &n0,
const vec3d &p1,
const vec3d &n1, vec3d &p, vec3d &v );
1051 friend double angle_pnt_2_plane(
const vec3d& ptplane, vec3d norm,
const vec3d& ptaxis, vec3d axis,
const vec3d &pt,
int ccw, vec3d &prot );
1052 friend double signed_dist_pnt_2_plane(
const vec3d& org,
const vec3d& norm,
const vec3d& pnt );
1053 friend double dist_pnt_2_plane(
const vec3d& org,
const vec3d& norm,
const vec3d& pnt );
1054 friend double dist_pnt_2_line(
const vec3d& line_pt1,
const vec3d& line_pt2,
const vec3d& pnt );
1055 friend double dist_pnt_2_ray(
const vec3d& line_pt1,
const vec3d& dir_unit_vec,
const vec3d& pnt );
1057 friend vec3d proj_u_on_v(
const vec3d& u,
const vec3d& v );
1058 friend vec3d proj_pnt_on_line_seg(
const vec3d& line_pt1,
const vec3d& line_pt2,
const vec3d& pnt );
1059 friend vec3d proj_pnt_on_ray(
const vec3d& line_pt1,
const vec3d& line_dir,
const vec3d& pnt );
1060 friend vec3d proj_pnt_on_line(
const vec3d& line_pt1,
const vec3d& line_pt2,
const vec3d& pnt );
1061 friend vec3d proj_pnt_to_plane(
const vec3d& org,
const vec3d& plane_ln1,
const vec3d& plane_ln2,
const vec3d& pnt );
1062 friend vec3d proj_vec_to_plane(
const vec3d& vec,
const vec3d& norm );
1063 friend int tri_seg_intersect(
const vec3d& A,
const vec3d& B,
const vec3d& C,
const vec3d& D,
const vec3d& E,
1064 double& u,
double& w,
double& t );
1065 friend int tri_ray_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 plane_ray_intersect(
const vec3d& A,
const vec3d& B,
const vec3d& C,
const vec3d& D,
const vec3d& E,
double& t );
1068 friend int plane_ray_intersect(
const vec3d& orig,
const vec3d& norm,
const vec3d& D,
const vec3d& E,
double& t );
1069 friend int ray_ray_intersect(
const vec3d& A,
const vec3d& B,
const vec3d& C,
const vec3d& D, vec3d& int_pnt1, vec3d& int_pnt2 );
1070 friend double tetra_volume(
const vec3d& A,
const vec3d& B,
const vec3d& C );
1071 friend double area(
const vec3d& A,
const vec3d& B,
const vec3d& C );
1072 friend double poly_area(
const std::vector< vec3d > & pnt_vec );
1073 friend double dist3D_Segment_to_Segment(
const vec3d& S1P0,
const vec3d& S1P1,
const vec3d& S2P0,
const vec3d& S2P1 );
1074 friend double dist3D_Segment_to_Segment(
const vec3d& S1P0,
const vec3d& S1P1,
const vec3d& S2P0,
const vec3d& S2P1,
1075 double* Lt, vec3d* Ln,
double* St, vec3d* Sn );
1076 friend double nearSegSeg(
const vec3d& L0,
const vec3d& L1,
const vec3d& S0,
const vec3d& S1,
double* Lt, vec3d* Ln,
double* St, vec3d* Sn );
1077 friend double pointLineDistSquared(
const vec3d & p,
const vec3d& lp0,
const vec3d& lp1,
double &t, vec3d &pon );
1078 friend double pointSegDistSquared(
const vec3d& p,
const vec3d& sp0,
const vec3d& sp1,
double &t, vec3d &pon );
1079 friend vec3d point_on_line(
const vec3d & lp0,
const vec3d & lp1,
const double & t );
1081 friend vec2d MapToPlane(
const vec3d & p,
const vec3d & planeOrig,
const vec3d & planeVec1,
const vec3d & planeVec2 );
1082 friend vec3d MapFromPlane(
const vec2d & uw,
const vec3d & planeOrig,
const vec3d & planeVec1,
const vec3d & planeVec2 );
1084 friend int plane_half_space(
const vec3d & planeOrig,
const vec3d & planeNorm,
const vec3d & pnt );
1086 friend bool line_line_intersect(
const vec3d & p1,
const vec3d & p2,
const vec3d & p3,
const vec3d & p4,
double* s,
double* t );
1090 friend bool PtInTri(
const vec3d & v0,
const vec3d & v1,
const vec3d & v2,
const vec3d & p );
1091 friend vec3d BarycentricWeights(
const vec3d & v0,
const vec3d & v1,
const vec3d & v2,
const vec3d & p );
1092 friend void BilinearWeights(
const vec3d & p0,
const vec3d & p1,
const vec3d & p, std::vector< double > & weights );
1093 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 );
1094 friend double pnt_tri_min_dist(
const vec3d & v0,
const vec3d & v1,
const vec3d & v2,
const vec3d & pnt, vec3d &pnearest );
1096 friend vec3d slerp(
const vec3d& a,
const vec3d& b,
const double &t );
1097 friend void printpt(
const vec3d & v );
1098 friend vec3d ToSpherical(
const vec3d & v );
1099 friend vec3d ToSpherical2(
const vec3d & v,
const vec3d & vdet );
1100 friend vec3d ToCartesian(
const vec3d & v );
1438string to_string(
const vec3d &v);
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)