📄 ellihelp.c
字号:
/* ellipsoid_par_help.c */#include "ellipsoid.h"#define SetP(p,px,py,pz) (p).x=(px), (p).y=(py), (p).z=(pz)#define SetV(v,px,py,pz,nx,ny,nz) SetP((v)->p,px,py,pz), SetP((v)->n,nx,ny,nz)#define SetF(f,i0,i1,i2) (f)->v0 = i0, (f)->v1 = i1, (f)->v2 = i2void ellipsoid_par_help (int n, int nv, int nf, vertex *ev, face *ef, vertex *octant){ int i, j, vv, ww, vv0, ww0; vertex *v, *o; face *f; /* Generate vertices and triangular faces of the ellipsoid. */ /* Note that each of the 18 statements below (par_0 ~ par_17) */ /* are independent of each other. */#pragma parallel#pragma local(i,j,v,o,f,vv,ww,vv0,ww0)#pragma byvalue(n,nv,nf,ev,ef,octant)/** #pragma distinct(*v,*ev) **//** #pragma distinct(*o,*octant) **//** #pragma distinct(*f,*ef) **//* parallel */ {#pragma independent /* par_0 */ { /* the north pole */ v = ev, o = octant; SetV (v, o->p.x, o->p.y, o->p.z, o->n.x, o->n.y, o->n.z); ; }#pragma independent /* par_1 */ { /* vertices on the 1st octant */ v = ev+1, o = octant+1; for (i = 1;;) { for (j = i; --j >= 0; o++, v++) SetV (v, o->p.x, o->p.y, o->p.z, o->n.x, o->n.y, o->n.z); if (i == n) break; v += 3*i, i++, o++; } ; /* This empty statement is necessary because of the compiler-bug(?). */ }#pragma independent /* par_2 */ { /* vertices on the 2nd octant */ v = ev+2, o = octant+2; for (i = 1;;) { for (j = i; --j >= 0; o--, v++) SetV (v, -o->p.x, o->p.y, o->p.z, -o->n.x, o->n.y, o->n.z); if (i == n) break; v += 3*i+1, i++, o += 2*i; } ; }#pragma independent /* par_3 */ { /* vertices on the 3rd octant */ v = ev+3, o = octant+1; for (i = 1;;) { for (j = i; --j >= 0; o++, v++) SetV (v, -o->p.x, -o->p.y, o->p.z, -o->n.x, -o->n.y, o->n.z); if (i == n) break; v += 3*i+2, i++, o++; } ; }#pragma independent /* par_4 */ { /* vertices on the 4th octant */ v = ev+4, o = octant+2; for (i = 1;;) { for (j = i; --j >= 0; o--, v++) SetV (v, o->p.x, -o->p.y, o->p.z, o->n.x, -o->n.y, o->n.z); if (i == n) break; i++, v += 3*i, o += 2*i; } ; }#pragma independent /* par_5 */ { /* vertices on the 5th octant */ v = ev+nv-5, o = octant+1; for (i = 1;;) { for (j = i; --j >= 0; o++, v++) SetV (v, o->p.x, o->p.y, -o->p.z, o->n.x, o->n.y, -o->n.z); if (i == n) break; v -= 5*i+4, i++, o++; } ; }#pragma independent /* par_6 */ { /* vertices on the 6th octant */ v = ev+nv-4, o = octant+2; for (i = 1;;) { for (j = i; --j >= 0; o--, v++) SetV (v, -o->p.x, o->p.y, -o->p.z, -o->n.x, o->n.y, -o->n.z); if (i == n) break; v -= 5*i+3, i++, o += 2*i; } ; }#pragma independent /* par_7 */ { /* vertices on the 7th octant */ v = ev+nv-3, o = octant+1; for (i = 1;;) { for (j = i; --j >= 0; o++, v++) SetV (v, -o->p.x, -o->p.y, -o->p.z, -o->n.x, -o->n.y, -o->n.z); if (i == n) break; v -= 5*i+2, i++, o++; } ; }#pragma independent /* par_8 */ { /* vertices on the 8th octant */ v = ev+nv-2, o = octant+2; for (i = 1;;) { for (j = i; --j >= 0; o--, v++) SetV (v, o->p.x, -o->p.y, -o->p.z, o->n.x, -o->n.y, -o->n.z); if (i == n) break; v -= 5*i+1, i++, o += 2*i; } ; }#pragma independent /* par_9 */ { /* the south pole */ v = ev+nv-1, o = octant; SetV (v, -o->p.x, -o->p.y, -o->p.z, -o->n.x, -o->n.y, -o->n.z); ; }#pragma independent /* par_10 */ { /* faces on the 1st octant */ f = ef; vv = 0, ww = 1; for (i = 1;;) { for (j = i;;) { SetF (f, vv, ww, ++ww), f++; if (--j == 0) break; SetF (f, vv, ww, ++vv), f++; } if (i == n) break; f += 6*i-3; vv = ww-i; ww += 3*i; i++; } ; }#pragma independent /* par_11 */ { /* faces on the 2nd octant */ f = ef+1; vv = 0, ww = 2; for (i = 1;;) { for (j = i;;) { SetF (f, vv, ww, ++ww), f++; if (--j == 0) break; SetF (f, vv, ww, ++vv), f++; } if (i == n) break; f += 6*i-1; vv = ww-i; ww += 3*i+1; i++; } ; }#pragma independent /* par_12 */ { /* faces on the 3rd octant */ f = ef+2; vv = 0, ww = 3; for (i = 1;;) { for (j = i;;) { SetF (f, vv, ww, ++ww), f++; if (--j == 0) break; SetF (f, vv, ww, ++vv), f++; } if (i == n) break; f += 6*i+1; vv = ww-i; ww += 3*i+2; i++; } ; }#pragma independent /* par_13 */ { /* faces on the 4th octant */ f = ef+3; vv = 0, ww = 4, vv0 = 0, ww0 = 1; for (i = 1;;) { for (j = i;;) { if (--j == 0) { SetF (f, vv0, ww, ww0), vv++, ww++, f++; break; } SetF (f, vv, ww, ++ww), f++; if (j == 1) SetF (f, vv, ww, vv0), f++; else SetF (f, vv, ww, ++vv), f++; } if (i == n) break; vv0 = ww0; ww0 += 4*i; f += 6*i+3; vv = ww-i; i++; ww += 3*i; } ; }#pragma independent /* par_14 */ { /* faces on the 5th octant */ f = ef+nf-4; vv = nv-5, ww = nv-1; for (i = 1;;) { for (j = i;;) { SetF (f, vv, ww, ++vv), f++; if (--j == 0) break; SetF (f, vv, ww, ++ww), f++; } if (i == n) break; f -= 10*i+3; ww = vv-i; i++; vv -= 5*i-1; } ; }#pragma independent /* par_15 */ { /* faces on the 6th octant */ f = ef+nf-3; vv = nv-4, ww = nv-1; for (i = 1;;) { for (j = i;;) { SetF (f, vv, ww, ++vv), f++; if (--j == 0) break; SetF (f, vv, ww, ++ww), f++; } if (i == n) break; f -= 10*i+1; ww = vv-i; i++; vv -= 5*i-2; } ; }#pragma independent /* par_16 */ { /* faces on the 7th octant */ f = ef+nf-2; vv = nv-3, ww = nv-1; for (i = 1;;) { for (j = i;;) { SetF (f, vv, ww, ++vv), f++; if (--j == 0) break; SetF (f, vv, ww, ++ww), f++; } if (i == n) break; f -= 10*i-1; ww = vv-i; i++; vv -= 5*i-3; } ; }#pragma independent /* par_17 */ { /* faces on the 8th octant */ f = ef+nf-1; vv = nv-2, ww = nv-1, vv0 = nv-5, ww0 = nv-1; for (i = 1;;) { for (j = i;;) { if (--j == 0) { SetF (f, vv, ww0, vv0), vv++, ww++, f++; break; } SetF (f, vv, ww, ++vv), f++; if (j == 1) SetF (f, vv, ww, ww0), f++; else SetF (f, vv, ww, ++ww), f++; } if (i == n) break; f -= 10*i-3; ww = vv-i; i++; vv -= 5*i-4; ww0 = vv0; vv0 -= 4*i; } ; }/* parallel */ }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -