57 double *n1,*n2,nt[3],ps,ps2,dd,ux,uy,uz,ll;
72 memcpy(&pb->
b[i],p[i]->
c,3*
sizeof(
double));
78 else if (
MG_EDG(p[i]->tag) ) {
84 ps = n1[0]*nt[0] + n1[1]*nt[1] + n1[2]*nt[2];
85 ps2 = n2[0]*nt[0] + n2[1]*nt[1] + n2[2]*nt[2];
86 if ( fabs(ps) > fabs(ps2) )
87 memcpy(&pb->
n[i],n1,3*
sizeof(
double));
89 memcpy(&pb->
n[i],n2,3*
sizeof(
double));
90 memcpy(&pb->
t[i],p[i]->
n,3*
sizeof(
double));
93 memcpy(&pb->
n[i],p[i]->
n,3*
sizeof(
double));
101 ux = p[i2]->
c[0] - p[i1]->
c[0];
102 uy = p[i2]->
c[1] - p[i1]->
c[1];
103 uz = p[i2]->
c[2] - p[i1]->
c[2];
105 ll = ux*ux + uy*uy + uz*uz;
113 if (
MS_SIN(p[i1]->tag) ) {
115 pb->
b[2*i+3][0] = p[i1]->
c[0] + dd * ux;
116 pb->
b[2*i+3][1] = p[i1]->
c[1] + dd * uy;
117 pb->
b[2*i+3][2] = p[i1]->
c[2] + dd * uz;
120 dd = (ux*pb->
t[i1][0] + uy*pb->
t[i1][1] + uz*pb->
t[i1][2]) / 3.0;
121 pb->
b[2*i+3][0] = p[i1]->
c[0] + dd * pb->
t[i1][0];
122 pb->
b[2*i+3][1] = p[i1]->
c[1] + dd * pb->
t[i1][1];
123 pb->
b[2*i+3][2] = p[i1]->
c[2] + dd * pb->
t[i1][2];
125 if (
MS_SIN(p[i2]->tag) ) {
127 pb->
b[2*i+4][0] = p[i2]->
c[0] - dd * ux;
128 pb->
b[2*i+4][1] = p[i2]->
c[1] - dd * uy;
129 pb->
b[2*i+4][2] = p[i2]->
c[2] - dd * uz;
132 dd = -(ux*pb->
t[i2][0] + uy*pb->
t[i2][1] + uz*pb->
t[i2][2]) / 3.0;
133 pb->
b[2*i+4][0] = p[i2]->
c[0] + dd * pb->
t[i2][0];
134 pb->
b[2*i+4][1] = p[i2]->
c[1] + dd * pb->
t[i2][1];
135 pb->
b[2*i+4][2] = p[i2]->
c[2] + dd * pb->
t[i2][2];
139 ps = ux*(pb->
t[i1][0]+pb->
t[i2][0]) + uy*(pb->
t[i1][1]+pb->
t[i2][1]) + uz*(pb->
t[i1][2]+pb->
t[i2][2]);
141 pb->
t[i+3][0] = pb->
t[i1][0] + pb->
t[i2][0] - ps*ux;
142 pb->
t[i+3][1] = pb->
t[i1][1] + pb->
t[i2][1] - ps*uy;
143 pb->
t[i+3][2] = pb->
t[i1][2] + pb->
t[i2][2] - ps*uz;
144 dd = pb->
t[i+3][0]*pb->
t[i+3][0] + pb->
t[i+3][1]*pb->
t[i+3][1] + pb->
t[i+3][2]*pb->
t[i+3][2];
154 ps = ux*n1[0] + uy*n1[1] + uz*n1[2];
155 pb->
b[2*i+3][0] = (2.0*p[i1]->
c[0] + p[i2]->
c[0] - ps*n1[0]) / 3.0;
156 pb->
b[2*i+3][1] = (2.0*p[i1]->
c[1] + p[i2]->
c[1] - ps*n1[1]) / 3.0;
157 pb->
b[2*i+3][2] = (2.0*p[i1]->
c[2] + p[i2]->
c[2] - ps*n1[2]) / 3.0;
159 ps = -(ux*n2[0] + uy*n2[1] + uz*n2[2]);
160 pb->
b[2*i+4][0] = (2.0*p[i2]->
c[0] + p[i1]->
c[0] - ps*n2[0]) / 3.0;
161 pb->
b[2*i+4][1] = (2.0*p[i2]->
c[1] + p[i1]->
c[1] - ps*n2[1]) / 3.0;
162 pb->
b[2*i+4][2] = (2.0*p[i2]->
c[2] + p[i1]->
c[2] - ps*n2[2]) / 3.0;
166 ps = ux*(n1[0]+n2[0]) + uy*(n1[1]+n2[1]) + uz*(n1[2]+n2[2]);
168 pb->
n[i+3][0] = n1[0] + n2[0] - ps*ux;
169 pb->
n[i+3][1] = n1[1] + n2[1] - ps*uy;
170 pb->
n[i+3][2] = n1[2] + n2[2] - ps*uz;
171 dd = pb->
n[i+3][0]*pb->
n[i+3][0] + pb->
n[i+3][1]*pb->
n[i+3][1] + pb->
n[i+3][2]*pb->
n[i+3][2];
181 for (i=0; i<3; i++) {
183 pb->
b[9][0] -= dd * pb->
b[i][0];
184 pb->
b[9][1] -= dd * pb->
b[i][1];
185 pb->
b[9][2] -= dd * pb->
b[i][2];
187 for (i=0; i<3; i++) {
188 pb->
b[9][0] += 0.25 * (pb->
b[2*i+3][0] + pb->
b[2*i+4][0]);
189 pb->
b[9][1] += 0.25 * (pb->
b[2*i+3][1] + pb->
b[2*i+4][1]);
190 pb->
b[9][2] += 0.25 * (pb->
b[2*i+3][2] + pb->
b[2*i+4][2]);
208 double dd,u,v,w,ps,ux,uy,uz;
211 memset(to,0,3*
sizeof(
double));
217 for (i=0; i<3; i++) {
218 o[i] = pb->
b[0][i]*w*w*w + pb->
b[1][i]*u*u*u + pb->
b[2][i]*v*v*v \
219 + 3.0 * (pb->
b[3][i]*u*u*v + pb->
b[4][i]*u*v*v + pb->
b[5][i]*w*v*v \
220 + pb->
b[6][i]*w*w*v + pb->
b[7][i]*w*w*u + pb->
b[8][i]*w*u*u)\
221 + 6.0 * pb->
b[9][i]*u*v*w;
224 no[i] = pb->
n[0][i]*w*w + pb->
n[1][i]*u*u + pb->
n[2][i]*v*v \
225 + 2.0 * (pb->
n[3][i]*u*v + pb->
n[4][i]*v*w + pb->
n[5][i]*u*w);
233 ux = pb->
b[2][0] - pb->
b[1][0];
234 uy = pb->
b[2][1] - pb->
b[1][1];
235 uz = pb->
b[2][2] - pb->
b[1][2];
236 dd = ux*ux + uy*uy + uz*uz;
256 ps = pb->
t[1][0]* pb->
t[2][0] + pb->
t[1][1]* pb->
t[2][1] + pb->
t[1][2]* pb->
t[2][2];
258 to[0] = pb->
t[1][0]*u + pb->
t[2][0]*v;
259 to[1] = pb->
t[1][1]*u + pb->
t[2][1]*v;
260 to[2] = pb->
t[1][2]*u + pb->
t[2][2]*v;
263 to[0] = -pb->
t[1][0]*u + pb->
t[2][0]*v;
264 to[1] = -pb->
t[1][1]*u + pb->
t[2][1]*v;
265 to[2] = -pb->
t[1][2]*u + pb->
t[2][2]*v;
270 ux = pb->
b[2][0] - pb->
b[0][0];
271 uy = pb->
b[2][1] - pb->
b[0][1];
272 uz = pb->
b[2][2] - pb->
b[0][2];
273 dd = ux*ux + uy*uy + uz*uz;
293 ps = pb->
t[0][0]* pb->
t[2][0] + pb->
t[0][1]* pb->
t[2][1] + pb->
t[0][2]* pb->
t[2][2];
295 to[0] = pb->
t[0][0]*w + pb->
t[2][0]*v;
296 to[1] = pb->
t[0][1]*w + pb->
t[2][1]*v;
297 to[2] = pb->
t[0][2]*w + pb->
t[2][2]*v;
300 to[0] = -pb->
t[0][0]*w + pb->
t[2][0]*v;
301 to[1] = -pb->
t[0][1]*w + pb->
t[2][1]*v;
302 to[2] = -pb->
t[0][2]*w + pb->
t[2][2]*v;
307 ux = pb->
b[1][0] - pb->
b[0][0];
308 uy = pb->
b[1][1] - pb->
b[0][1];
309 uz = pb->
b[1][2] - pb->
b[0][2];
310 dd = ux*ux + uy*uy + uz*uz;
330 ps = pb->
t[0][0]* pb->
t[1][0] + pb->
t[0][1]* pb->
t[1][1] + pb->
t[0][2]* pb->
t[1][2];
332 to[0] = pb->
t[0][0]*w + pb->
t[1][0]*u;
333 to[1] = pb->
t[0][1]*w + pb->
t[1][1]*u;
334 to[2] = pb->
t[0][2]*w + pb->
t[1][2]*u;
337 to[0] = -pb->
t[0][0]*w + pb->
t[1][0]*u;
338 to[1] = -pb->
t[0][1]*w + pb->
t[1][1]*u;
339 to[2] = -pb->
t[0][2]*w + pb->
t[1][2]*u;
343 dd = no[0]*no[0] + no[1]*no[1] + no[2]*no[2];
351 dd = to[0]*to[0] + to[1]*to[1] + to[2]*to[2];
int MMG5_mmgsBezierCP(MMG5_pMesh mesh, MMG5_Tria *pt, MMG5_pBezier pb, int8_t ori)
int MMGS_bezierInt(MMG5_pBezier pb, double uv[2], double o[3], double no[3], double to[3])
static const uint8_t MMG5_iprv2[3]
static const uint8_t MMG5_inxt2[6]
int MMG5_nortri(MMG5_pMesh mesh, MMG5_pTria pt, double *n)
Structure to store vertices of an MMG mesh.
Structure to store triangles of a MMG mesh.