 |
MAGiC
V5.0
Mailleurs Automatiques de Géometries intégrés à la Cao
|
Aller à la documentation de ce fichier.
23 #ifndef ot_algorithme_geometriqueH
24 #define ot_algorithme_geometriqueH
42 (
double p[3],
double theta,
double r[3],
double q[3]);
44 (
double *norm,
double *root,
double *pnt);
46 (
double *norm,
double *root,
double *pnt);
48 static void Proj3D_Point_Plan(
double *norm,
double *root,
double *pnt,
double *proj_pnt);
53 static int Intr3D_Plane_Plane(
double __N1[3],
double __P1[3],
double __N2[3],
double __P2[3],
double __D[3]);
54 static int Closest_Point_to_Line_3d (
double __lineOrigin[3],
double __lineDirection[3],
double __p[3],
double _r[3]);
61 static int intersect2D_SegSeg(
double S1P0[2],
double S1P1[2],
double S2P0[2],
double S2P1[2],
double __intrPoint[2],
double __intrEndPointSeg[2]);
63 (
double a[3],
double b[3],
double c[3]);
65 (
double P0[3],
double P1[3],
double O[3],
double V[3],
double *p_coef,
double EPSILON=1E-8);
67 (
double P0[3],
double P1[3],
double O[3],
double V[3],
double *p_coef,
double *distance,
double EPSILON);
69 static void Dist3D_Segment_Segment(
double *S11,
double *S12,
double *S21,
double *S22,
double *dist,
double *P1,
double *P2);
71 inline static void CROSS_PROD3(
double a[3],
double b[3],
double c[3]) {
72 c[0] =
a[1]*b[2]-
a[2]*b[1];
73 c[1] = -
a[0]*b[2]+
a[2]*b[0];
74 c[2] = +
a[0]*b[1]-
a[1]*b[0];
77 c[0] =
a[1]*b[2]-
a[2]*b[1];
78 c[1] = -
a[0]*b[2]+
a[2]*b[0];
79 c[2] = +
a[0]*b[1]-
a[1]*b[0];
92 return a[0]*b[0]+
a[1]*b[1]+
a[2]*b[2];
98 return (
a[0]*
a[0]+
a[1]*
a[1]+
a[2]*
a[2]);
101 double norm_vec3_normalize = 1/
sqrt(
a[0]*
a[0]+
a[1]*
a[1]+
a[2]*
a[2]);
102 a[0]*=norm_vec3_normalize;
103 a[1]*=norm_vec3_normalize;
104 a[2]*=norm_vec3_normalize;
112 double tmp_inv_divide = 1/b;
113 c[0]=
a[0]*tmp_inv_divide;
114 c[1]=
a[1]*tmp_inv_divide;
115 c[2]=
a[2]*tmp_inv_divide;
128 double sqaredDist = (
a[0]-b[0])*(
a[0]-b[0]) + (
a[1]-b[1])*(
a[1]-b[1]) + (
a[2]-b[2])*(
a[2]-b[2]);
129 if (sqaredDist != 0.0)
return sqrt(sqaredDist);
133 return ((
a[0]-b[0])*(
a[0]-b[0]) + (
a[1]-b[1])*(
a[1]-b[1]) + (
a[2]-b[2])*(
a[2]-b[2]));
137 return a[0]*b[1]-
a[1]*b[0];
148 return a[0]*b[0]+
a[1]*b[1];
154 return (
a[0]*
a[0]+
a[1]*
a[1]);
157 double norm_vec2_normalize = 1/
sqrt(
a[0]*
a[0]+
a[1]*
a[1]);
158 a[0]*=norm_vec2_normalize;
159 a[1]*=norm_vec2_normalize;
166 double tmp_inv_divide = 1/b;
167 c[0]=
a[0]*tmp_inv_divide;
168 c[1]=
a[1]*tmp_inv_divide;
179 return sqrt(pow(
a[0]-b[0],2) + pow(
a[1]-b[1],2));
182 return (pow(
a[0]-b[0],2) + pow(
a[1]-b[1],2));
185 return acos(fabs(__uv1[0]*__uv2[0]+__uv1[1]*__uv2[1])/(
sqrt(__uv1[0]*__uv1[0]+__uv1[1]*__uv1[1])*
sqrt(__uv2[0]*__uv2[0]+__uv2[1]*__uv2[1])));
189 static void PROJECT2D_POINT_SEGMENT(
double seg_u0,
double seg_v0,
double seg_u1,
double seg_v1,
double pt_u,
double pt_v,
double * coef) ;
191 static double pbase_Plane(
double P[3],
double planeNormal[3],
double planeRootPoint[3],
double B[3]);
195 (
double __v0[3],
double __v1[3],
double __v2[3]);
197 static int intersect_RayTriangle(
double RP0[3],
double dir[3],
double TV0[3],
double TV1[3],
double TV2[3],
double I[3],
double *IT=0 );
200 static int project_PointTriangle(
double P0[3],
double TV0[3],
double TV1[3],
double TV2[3],
double I[3],
double *IT=0 );
202 static int intersect_SegTriangle(
double SP0[3],
double SP1[3],
double TV0[3],
double TV1[3],
double TV2[3],
double I[3],
double *IT=0 );
204 static double Area_Triangle(
double TV0[3],
double TV1[3],
double TV2[3]);
static double Dist2D_Point_Segment(double a[2], double b[2], double c[2])
static double VEC2_DISTANCE2_VEC2(double a[2], double b[2])
static void CROSS_PROD3(double a[3], double b[3], double c[3])
static void VEC2_NORMALIZE(double a[2])
static int Closest_Point_to_Segment_2d(double *SP0, double *SP1, double *P, double *t, double result[2])
static void VEC2_DIVIDE_SCALAR(double a[2], double b, double c[2])
static void VEC3_CROSS_VEC3(double a[3], double b[3], double c[3])
static int intersect_RayTriangle(double RP0[3], double dir[3], double TV0[3], double TV1[3], double TV2[3], double I[3], double *IT=0)
static void VEC3_PLUS_VEC3(double a[3], double b[3], double c[3])
static int project_PointTriangle(double P0[3], double TV0[3], double TV1[3], double TV2[3], double I[3], double *IT=0)
static double Dist3D_Point_Segment(double a[3], double b[3], double c[3])
static void VEC2_MULTIPLY_SCALAR(double a[2], double b, double c[2])
static void Proj3D_Point_Plan(double *norm, double *root, double *pnt, double *proj_pnt)
static double VEC2_DOT_VEC2(double a[2], double b[2])
static double VEC3_DOT_VEC3(double a[3], double b[3])
static int Closest_Point_to_Line_3d(double __lineOrigin[3], double __lineDirection[3], double __p[3], double _r[3])
static double Angle3D_Segment_Segment(double __v0[3], double __v1[3], double __v2[3])
static void VEC3_DIVIDE_SCALAR(double a[3], double b, double c[3])
static double Dist3D_Point_Plane(double *norm, double *root, double *pnt)
static double Area_Triangle(double TV0[3], double TV1[3], double TV2[3])
static double VEC3_NORM(double a[3])
static void VEC2_PLUS_VEC2(double a[2], double b[2], double c[2])
static void VEC3_NORMALIZE(double a[3])
static double pbase_Plane(double P[3], double planeNormal[3], double planeRootPoint[3], double B[3])
static void VEC2_ASSIGN_VEC2(double a[2], double b[2])
static int Intr3D_Plane_Plane(double __N1[3], double __P1[3], double __N2[3], double __P2[3], double __D[3])
static void VEC2_MINUS_VEC2(double a[2], double b[2], double c[2])
static void PROJECT2D_POINT_SEGMENT(double seg_u0, double seg_v0, double seg_u1, double seg_v1, double pt_u, double pt_v, double *coef)
static int Closest_Point_to_Segment_3d(double a[3], double b[3], double c[3], double d[3])
static double VEC2_ABSOLUTE_ANGLE_VEC2(double __uv1[2], double __uv2[2])
static int intersect_SegTriangle(double SP0[3], double SP1[3], double TV0[3], double TV1[3], double TV2[3], double I[3], double *IT=0)
static void VEC3_MULTIPLY_SCALAR(double a[3], double b, double c[3])
static void Rot3D_Point_Axe_Angle(double p[3], double theta, double r[3], double q[3])
static void VEC3_REVERSE(double a[3])
double2 acos(double2 &val)
static void Dist3D_Segment_Segment(double *S11, double *S12, double *S21, double *S22, double *dist, double *P1, double *P2)
double2 sqrt(double2 &val)
static double Closest_Point_to_Plane_3d(double *norm, double *root, double *pnt, double *res)
static double VEC2_DISTANCE_VEC2(double a[2], double b[2])
static double VEC2_NORM2(double a[2])
static double Dist3D_Point_Plan(double *norm, double *root, double *pnt)
static double VEC3_DISTANCE2_VEC3(double a[3], double b[3])
static void VEC2_REVERSE(double a[2])
static double VEC3_NORM2(double a[3])
static int Intr3D_Segment_Plan(double P0[3], double P1[3], double O[3], double V[3], double *p_coef, double EPSILON=1E-8)
static double VEC2_NORM(double a[2])
static void VEC3_ASSIGN_VEC3(double a[3], double b[3])
static double VEC3_DISTANCE_VEC3(double a[3], double b[3])
static void VEC3_MINUS_VEC3(double a[3], double b[3], double c[3])
static int intersect2D_SegSeg(double S1P0[2], double S1P1[2], double S2P0[2], double S2P1[2], double __intrPoint[2], double __intrEndPointSeg[2])
static int Dist3D_Segment_Plan(double P0[3], double P1[3], double O[3], double V[3], double *p_coef, double *distance, double EPSILON)
static double PERP_PROD2(double a[2], double b[2])