struct point ptinterp (struct point pt0, struct point pt1, struct point pt2, struct point pt3, float var) /*< point interpolation >*/ { struct point a, b, c, d; struct point X0, X1, dX0, dX1; struct point ei, ek; struct point Temp; float temp; ei = makepoint (1., 0.); ek = makepoint (0., 1.); X0 = pt1; X1 = pt2; temp = dist(pt2, pt0); dX0.x = ptmult(ptdiff(pt2, pt0), ei) / temp; dX0.z = ptmult(ptdiff(pt2, pt0), ek) / temp; temp = dist(pt3, pt1); dX1.x = ptmult(ptdiff(pt3, pt1), ei) / temp; dX1.z = ptmult(ptdiff(pt3, pt1), ek) / temp; d = X0; c = dX0; b.x = 3. * (X1.x - X0.x) - 2. * dX0.x - dX1.x; b.z = 3. * (X1.z - X0.z) - 2. * dX0.z - dX1.z; a.x = X1.x - b.x - c.x - d.x; a.z = X1.z - b.z - c.z - d.z; Temp.x = d.x + var * (c.x + var * (b.x + var * a.x)); Temp.z = d.z + var * (c.z + var * (b.z + var * a.z)); return Temp; }
int main() { struct point testpoint = makepoint(4, 3); struct rect testrect; testrect.pt1 = makepoint(2, 1); testrect.pt2 = makepoint(5, 4); printf("%d\n", ptinrect(testpoint, testrect)); }
int main(){ struct rect test1, test2; test1.ll=makepoint(0,0); test1.ur=makepoint(1,1); test2.ll=makepoint(-9,-9); test2.ur=makepoint(-1,-1); printf("czy rozłączny:%d\n",disjointrect(test1,test2) ); }
int main(void){ struct rect screen; struct point middle; screen.pt1 = makepoint(0, 0); screen.pt2 = makepoint(XMAX, YMAX); middle = makepoint((screen.pt1.x + screen.pt2.x) / 2, (screen.pt1.y + screen.pt2.y) / 2); printf("Middle point has coordinates (%d, %d)\n", middle.x, middle.y); return 0; }
int main() { struct rect test1, test2; test1.ll=makepoint(0,0); test1.ur=makepoint(10,10); test2.ll=makepoint(9,9); test2.ur=makepoint(14,18); printf("rozłączny?: %d\n",disjointrect(test1,test2) ); }
int main() { struct rect test1, test2; test1.ll=makepoint(0,0); test1.ur=makepoint(10,10); test2.ll=makepoint(2,2); test2.ur=makepoint(8,8); printf("%d\n",rectinrect(test2,test1)); }
int main() { struct point origin, tenfive, *pointPtr, *basePtr; char buffer [100]; char* offset; int i; origin = makepoint(34,45); printf("%p\n", &origin); printf("(%i,%i)\n", origin.x, origin.y); printf("\n"); tenfive = makepoint(10,5); printf("%p\n", &tenfive); printf("(%i,%i)\n", tenfive.x, tenfive.y); printf("Size of struct point: %i\n", sizeof(struct point)); pointPtr = malloc(5*(sizeof(struct point))); basePtr = pointPtr + 100; printf("pointPtr = %p\n", pointPtr++); printf("pointPtr + 1 = %p\n", pointPtr++); printf("pointPtr + 2 = %p\n", pointPtr++); printf("pointPtr + 3 = %p\n", pointPtr++); printf("pointPtr + 4 = %p\n", pointPtr); basePtr -= 100; free(basePtr); memset(buffer, 0, 100); writeCrap(buffer); offset = buffer + 20; writeCrap(offset); offset += 30; writeCrap(offset); for (i = 0; i < 100; i++) { char temp = buffer[i]; if (temp >= 'a' && temp <= 'z') { printf("%c", temp); } else { printf("_"); } } printf("\n"); return 0; }
int main(){ struct rect screen; struct point middle; makepoint(&screen.p1, 0, 0); makepoint(&screen.p2, XMAX, YMAX); makepoint(&middle, (screen.p1.x + screen.p2.x)/2, (screen.p1.y + screen.p2.y)/2); printf("middle : %d, %d\n", middle.x, middle.y); addpoint(&screen.p1, &middle); printf("screen.py : %d, %d\n", screen.p1.x, screen.p1.y); }
int main() { struct rect screen; screen.pt1 = makepoint(7, 1); screen.pt2 = makepoint(3, 10); struct rect canonscreen = canonrect(screen); printf("canon screen: (x1=%d, y1=%d), (x2=%d, y2=%d)\n", canonscreen.pt1.x, canonscreen.pt1.y, canonscreen.pt2.x, canonscreen.pt2.y); struct point inpoint = makepoint(4, 5); printf("point (%d, %d) in screen: %d\n", inpoint.x, inpoint.y, ptinrect(inpoint, canonscreen)); struct point outpoint = makepoint(-1, -7); printf("point (%d, %d) out of screen: %d\n", outpoint.x, outpoint.y, ptinrect(outpoint, canonscreen)); return 0; }
// // structures void structures() { t_point *pt = makepoint(2, 3, "alfa"); printpoint(pt); t_rect *rect = makerect(*makepoint(10, 10, "p1"), *makepoint(20, 20, "p2")); printrect(rect); printf("Area: %d\n", calcarea(rect)); printf("Area: %d\n", calcarea2(*rect)); free(pt); free(rect); }
int main() { struct rect screen; struct point middle; struct point makepoint(int, int); screen.pt1 = makepoint(0,0); screen.pt2 = makepoint(XMAX, YMAX); middle = makepoint((screen.pt1.x + screen.pt2.x)/2, (screen.pt1.y + screen.pt2.y)/2); printf("%d %d \n", middle.x, middle.y); struct point one = makepoint(1,1); printf("%d %d \n", (addpoint(middle, one)).x, (addpoint(middle, one)).y); return 0; }
main() { int i; point x, origin = { 0, 0 }, maxpt = { 320, 320 }; point pts[] = { -1, -1, 1, 1, 20, 300, 500, 400 }; rect screen = makerect(addpoint(maxpt, makepoint(-10, -10)), addpoint(origin, makepoint(10, 10))); for (i = 0; i < sizeof pts/sizeof pts[0]; i++) { printf("(%d,%d) is ", pts[i].x, (x = makepoint(pts[i].x, pts[i].y)).y); if (ptinrect(x, screen) == 0) printf("not "); printf("within [%d,%d; %d,%d]\n", screen.pt1.x, screen.pt1.y, screen.pt2.x, screen.pt2.y); } odd(y); return 0; }
int main () { //구조체 정의 struct rect screen; struct point middle; screen.pt1 = makepoint (0,0); screen.pt2 = makepoint (XMAX, YMAX); middle = makepoint ((screen.pt1.x + screen.pt2.x)/2, (screen.pt1.y + screen.pt2.y)/2); printf ("middle: %d, %d\n", middle.x, middle.y); screen.pt1 = addpoint (screen.pt1, middle); printf ("screen.pt1: %d, %d\n", screen.pt1.x, screen.pt1.y); printf("\nPress any key to end..."); getchar(); return 0; }
int main() { //structure declaration and tag struct point { int x; int y; }; struct rect { struct point pt1; struct point pt2; }; struct rect screen; struct point middle; struct point makepoint(int, int); screen.pt1 = makepoint(0, 0); screen.pt2 = makepoint(XMAX, YMAX); middle = makepoint((screen.pt1.x + screen.pt2.x)/2, (screen.pt1.y + screen.pt2.y)/2); }
int main () { //구조체 정의 struct rect screen; struct point middle; //구조체 멤버 연산자(. ->)는 포인터 연산자(& *)보다 우선순위가 높음 makepoint (&screen.pt1, 0, 0); makepoint (&screen.pt2, XMAX, YMAX); makepoint (&middle , (screen.pt1.x + screen.pt2.x)/2, (screen.pt1.y + screen.pt2.y)/2); printf ("middle: %d, %d\n", middle.x, middle.y); addpoint (&screen.pt1, &middle); printf ("screen.pt1: %d, %d\n", screen.pt1.x, screen.pt1.y); printf("\nPress any key to end..."); getchar(); return 0; }
int main() { int T,i,j; scanf("%d",&T); while(T--) { scanf("%d",&n); for(i = 0; i < n; i++) { scanf("%lf%lf",&in[i].x,&in[i].y); line[i].y = true; } for(i = 1;i < n; i++) { if(in[i].x == in[i-1].x) { line[i].y = false; line[i].A = in[i].x; } else { line[i].A = (in[i].y-in[i-1].y)*1.0/(in[i].x-in[i-1].x); line[i].B = in[i-1].y - line[i].A*in[i-1].x; } } if(in[n-1].x == in[0].x) { line[0].y = false; line[0].A = in[0].x; } else { line[0].A = (in[0].y-in[n-1].y)*1.0/(in[0].x-in[n-1].x); line[0].B = in[n-1].y - line[0].A*in[n-1].x; } pnum = 0; for(i = 0; i < n; i++) { for(j = i+1; j < n; j++) { makepoint(line[i],line[j]); } } for(i = 0; i < pnum; i++) if(check(test[i])) break; if(i < pnum) printf("YES\n"); else printf("NO\n"); } return 0; }
int main() { struct point p, p1, p2; struct rect r; p1 = makepoint(4, 6); p2 = makepoint(6, 4); p = addpoints(p1, p2); /* p.x = 4; // punkt, który ma odciętą 4 p.y = 6; // punkt, który ma odciętą 6 (zamiast tego mamy makepoint) */ printf("p = (%d, %d)\n", p.x, p.y); r = makerect(p1, p2); printf("r = (%d, %d) (%d, %d)\n", r.ll.x, r.ll.y, r.ur.x, r.ur.y); return 0; }
int main(void) { double dist, sqrt(double); struct point *pp, pt, middle, ptmp; struct rect screen; pt = makepoint(320,240); ptmp = makepoint(640,480); printf("%d, %d\n", pt.x, pt.y); printf("%d, %d\n", ptmp.x, ptmp.y); ptmp = addpoint(pt, ptmp); pp = &ptmp; printf("%d, %d\n", (*pp).x, (*pp).y); printf("%d, %d\n", pp->x, pp->y); dist = sqrt((double)pt.x * pt.x + (double)pt.y * pt.y); printf("%f\n", dist); screen = makerect(makepoint(0,0), makepoint(XMAX, YMAX)); middle = makepoint((screen.pt1.x + screen.pt2.x)/2, (screen.pt1.y + screen.pt2.y)/2); printf("%d, %d\n", middle.x, middle.y); pt = makepoint(2000,2000); printf(ptinrect(pt, screen) == 1 ? "point is in rec.\n ":"point is out rect.\n"); return 0; }
int main(void) { struct point p1, p2; struct rect r; int value[4]; /* 一个矩形需要两个点,两个坐标决定一个点,共4个坐标 */ int i, type; char s[MAXSIZE]; i = 0; while ((type = getpoint(s)) != EOF) { if (type == NUMBER) value[i++] = aToi(s); if (i == 4) { i = 0; p1 = makepoint(value[0], value[1]); p2 = makepoint(value[2], value[3]); r.p1 = p1; r.p2 = p2; drawrect(r); } } return 0; }
int main(){ print(RED "running.." RESET); struct point pt = makepoint(10, 10); struct point * ppt = &pt; printf("%d\n", (int) ppt); ++ppt->x; printf("x: %d | y: %d\n", pt.x, pt.y); /* pt = test2(pt); printf("x: %d | y: %d\n", pt.x, pt.y); */ //test(); return 0; }
main() { Point pt1 = makepoint(1, 2); Point pt2; pt2.x = 3; pt2.y = 4; Rect rec; rec.pt1 = pt1; rec.pt2 = pt2; printPoint(pt1); double sqr = sqrt((double)pt1.x * pt1.x + (double)pt1.y * pt1.y); printf("%f\n", dist(pt1)); printf("%d\n", ptinrect(addpoint(pt1, pt2), rec)); printf("%d\n", ptinrect(pt1, rec)); }
/* Here we draw the vectorscope layout */ void make_vectorscope_layout() { int i, p1_x, p1_y, p2_x, p2_y; double temp; char text[4]; boxColor(screen, vector_x-130, vector_y+130, vector_x+130, vector_y-130, black); hlineColor(screen, vector_x-20, vector_x-128, vector_y, white); hlineColor(screen, vector_x+20, vector_x+128, vector_y, white); vlineColor(screen, vector_x, vector_y-20, vector_y-128, white); vlineColor(screen, vector_x, vector_y+20, vector_y+128, white); circleColor(screen,vector_x, vector_y, 20, white); circleColor(screen,vector_x, vector_y, 50, white); circleColor(screen,vector_x, vector_y, 80, white); circleColor(screen,vector_x, vector_y,112, white); for (i =0; i<36; i++) { /* Here we draw the degree scale */ temp = 112* cos (i*(10/57.3)) ; /* sin & cos only accept radiant */ p1_x = round(temp); /* and not degree input */ temp = 112* sin (i*(10/57.3) ); p1_y = round(temp); temp = 117* cos (i*(10/57.3) ); p2_x = round(temp); temp = 117* sin (i*(10/57.3) ); p2_y = round(temp); lineColor(screen, vector_x + p1_x, vector_y + p1_y, vector_x + p2_x, vector_y + p2_y, white); } sprintf(text, "0"); /* Creating the grad description */ stringColor(screen, vector_x + 135 , vector_y - 3, text, white); sprintf(text, "90"); stringColor(screen, vector_x - 7 , vector_y - 145, text, white); sprintf(text, "180"); stringColor(screen, vector_x - 155 , vector_y - 3, text, white); sprintf(text, "270"); stringColor(screen, vector_x - 10 , vector_y + 135, text, white); makepoint( 90, 60); /* length, arc, for purple */ makepoint( 96, 104); /* length, arc, for red */ makepoint( 67, 166); /* length, arc, for yellow */ makepoint( 90, 241); /* length, arc, for green */ makepoint( 96, 283); /* length, arc, for cyan */ makepoint( 67, 346); /* length, arc, for blue */ }
int main(){ struct point a,b,c,d,e,f; a=makepoint(1,3); b=makepoint(3,4); c=makepoint(5,7); d=makepoint(7,9); e=makepoint(9,12); f=makepoint(11,15); struct rect K,L,M; K.ll=b; K.ur=c; L.ll=a; L.ur=d; M.ll=d; M.ur=e; printf("rectinrect(K,L):%d\n",rectinrect(K,L)); printf("rectinrect(K,M):%d\n",rectinrect(K,M)); return 0; }
void tut1(){ struct rect screen; struct point middle; struct point makepoint(int, int); screen.pt1 = makepoint(0, 0); screen.pt2 = makepoint(XMAX, YMAX); middle = makepoint((screen.pt1.x + screen.pt2.x)/2, (screen.pt1.y + screen.pt2.y)/2); struct point pt1 = makepoint(10, 10); struct point pt2 = makepoint(20, 20); struct point tst = addpoint(pt1, pt2); printf("pt1~ x: %d | y: %d\n", pt1.x, pt1.y); printf("pt2~ x: %d | y: %d\n", pt2.x, pt2.y); printf("tst~ x: %d | y: %d\n", tst.x, tst.y); struct point origin, *pp; origin = makepoint(0, 0); pp = &origin; printf("origin is (%d,%d)\n", pp->x, pp->y); }
struct rect screen; struct point middle; struct point makepoint(int, int); screen.pt1 = makepoint(0, 0); screen.pt2 = makepoint(XMAX, YMAX); middle = makepoint((screen.pt1.x + screen.pt2.x)/2, (screen.pt1.y + screen.pt2.y)/2);
main() { struct rect screen; struct point middle; struct point makepoint(int, int); struct point addpoint(struct point, struct point); int ptinrect(struct point, struct rect); struct rect canonrect(struct rect); screen.pt1 = makepoint(0, 0); screen.pt2 = makepoint(XMAX, YMAX); middle = makepoint((screen.pt1.x + screen.pt2.x)/2, (screen.pt1.y + screen.pt2.y)/2); struct point origin, *pp; pp = &origin; /* printf("origin is (%d,%d)\n", (*pp).x, (*pp).y); */ /* use the pp->x shorthand notation rather than (*pp).x */ printf("origin is (%d,%d)\n", pp->x, pp->y); struct rect r, *rp = &r; /* all the following are equivalent */ r.pt1.x; rp->pt1.x; (r.pt1).x; (rp->pt1).x; struct { int len; char *str; } q, *p; p = &q; char b[] = {'h', 'u', 'z', 'z', 'a', 'h', '\0'}; q.len = strlen(b); q.str = b; printf("%s, %d\n", p->str, p->len); /* K&R p132 - ". and ->, together with () for function calls and [] for subscripts, are at the top of the precedence hierarchy and thus bind bery tightly" */ /* ie, this increments len, not p */ ++p->len; printf("p->len now %d\n", p->len); /* which is same as */ ++(p->len); printf("p->len now %d\n", p->len); /* this would increment p before accessing len */ // (++p)->len; printf("*p->str fetches whatever str points to: %c\n", *p->str); printf("*p->str++ increments str after accessing whatever it points to: %c\n", *p->str++); printf("\t...so now *p->str yields: %c\n", *p->str); (*p->str)++; printf("(*p->str)++ increments whatever str points to: %c\n", *p->str); /* this would increment p after accessing whatever str points to */ //(*p->str)++; }
int main(int argc, char* argv[]) { int nang, N; float dx, dz; int nx, nz; float ox, oz; int gnx, gnz; float gdx, gdz, gox, goz; struct point length; int inter; float TETAMAX, alpha2; FILE *outfile; int ii; int rays, wfront, gap; int lomx, first; int nr, nrmax, nt; int prcube, pr, ste; int ns, nou; float DSmax, dt, T, freq; float *vel; float ds, os, goox; float xmin, xmax, zmin, zmax; float depth; struct point *pos; struct heptagon *cube; struct grid *out; sf_file inp, ampl, time; sf_init(argc,argv); inp = sf_input("in"); /* GET MODEL PARAMETERS */ if (!sf_histint(inp,"n1",&nz)) sf_error("No n1= in input"); if (!sf_histint(inp,"n2",&nx)) sf_error("No n2= in input"); if (!sf_histfloat(inp,"d1",&dz)) sf_error("No d1= in input"); if (!sf_histfloat(inp,"d2",&dx)) sf_error("No d2= in input"); if (!sf_histfloat(inp,"o1",&oz)) sf_error("No o1= in input"); if (!sf_histfloat(inp,"o2",&ox)) sf_error("No o2= in input"); /* GET TRACING PARAMETERS */ if(!sf_getint("nang",&nang)) nang = 10; /* Number of take-off angles */ if(!sf_getint("rays",&rays)) rays = 0; /* If draw rays */ if(!sf_getint("wfront",&wfront)) wfront = 0; /* If draw wavefronts */ if(!sf_getint("gap",&gap)) gap = 1; /* Draw wavefronts every gap intervals */ if(!sf_getint("inter",&inter)) inter = 1; /* If use linear interpolation */ if(!sf_getfloat("DSmax",&DSmax)) DSmax = 5; /* Maximum distance between contiguos points of a wavefront */ if(!sf_getfloat("dt",&dt)) dt = 0.0005; /* time step */ if(!sf_getint("nt",&nt)) nt = 5; /* Number of time steps between wavefronts */ if(!sf_getint("nrmax",&nrmax)) nrmax = 2000; /* Maximum number of points that define a wavefront */ if(!sf_getint("lomx",&lomx)) lomx = 1; /* Use Lomax's waveray method */ if(!sf_getint("first",&first)) first = 1; /* Obtain first arrivals only */ if(!sf_getint("nou",&nou)) nou = 6; /* GET GRIDDING PARAMETERS */ if(!sf_getint("gnx",&gnx)) gnx = nx; /* Coordinates of output grid */ if(!sf_getint("gnz",&gnz)) gnz = nz; if(!sf_getfloat("gdx",&gdx)) gdx = dx; if(!sf_getfloat("gdz",&gdz)) gdz = dz; if(!sf_getfloat("gox",&goox)) goox = ox; if(!sf_getfloat("goz",&goz)) goz = oz; /* GET LOMAX SPECIFIC PARAMETERS */ if(!sf_getint("N",&N)) N = 3; /* Number of control points */ if(!sf_getfloat("TETAMAX",&TETAMAX)) TETAMAX = 1.5; /* Truncation parameter */ if(!sf_getfloat("alpha2",&alpha2)) alpha2 = 4.0; /* Width of gaussian weighting function */ if(!sf_getfloat("freq",&freq)) freq = 100.; /* Pseudo-frequency of waverays */ /* GET DEBUGGING INFO */ if(!sf_getint("prcube",&prcube)) prcube=0; /* For debugging porpouses */ if(!sf_getint("pr",&pr)) pr=0; /* For debugging porpouses */ /* GET SOURCE LOCATIONS */ if(!sf_getint("ns",&ns) || ns==0) ns=1; /* Number of source locations */ if(!sf_getfloat("ds",&ds)) ds=1.; /* interval between sources */ if(!sf_getfloat("os",&os)) os=0.; /* first source location */ if(!sf_getfloat("depth",&depth)) depth=dz; /* Depth location of sources */ pos = (struct point *) sf_alloc (ns,sizeof(struct point)); for(ii=0;ii<ns;ii++) { pos[ii] = makepoint(ii*ds + os, depth); } /* PREPARE OUTPUT */ ampl = sf_output("ampl"); sf_putint(ampl,"n1",gnz); sf_putint(ampl,"n2",gnx); sf_putint(ampl,"n3",ns); sf_putfloat(ampl,"d1",gdz); sf_putfloat(ampl,"d2",gdx); sf_putfloat(ampl,"d3",ds); sf_putfloat(ampl,"o1",goz); sf_putfloat(ampl,"o2",goox); sf_putfloat(ampl,"o3",os); time = sf_output("time"); sf_putint(time,"n1",gnz); sf_putint(time,"n2",gnx); sf_putint(time,"n3",ns); sf_putfloat(time,"d1",gdz); sf_putfloat(time,"d2",gdx); sf_putfloat(time,"d3",ds); sf_putfloat(time,"o1",goz); sf_putfloat(time,"o2",goox); sf_putfloat(time,"o3",os); /* READ VELOCITY MODEL */ vel = sf_floatalloc(nx*nz+2); sf_floatread(vel,nx*nz,inp); /* ALLOCATE MEMORY FOR OUTPUT */ out = (struct grid *) sf_alloc (1,sizeof(struct grid)); out->time = sf_floatalloc (gnx*gnz); out->ampl = sf_floatalloc (gnx*gnz); out->flag = sf_intalloc (gnx*gnz); T = 1. / freq; length = makepoint((nx-1)*dx,(nz-1)*dz); cube = (struct heptagon *) sf_alloc (nrmax,sizeof(struct heptagon)); /* FOR DEBUGGING PORPOUSES, PRINT TO FILE */ if(pr||prcube) { outfile = fopen("junk","w"); } else { outfile = NULL; } /* SET DISPLAY IN ORDER TO SHOW RAYS ON SCREEN */ /* NOTE: THIS PROGRAM USES DIRECT CALLS TO LIB_VPLOT * TO DRAW THE RAYS AND THE WAVEFRONTS */ if(rays || wfront) { setgraphics(ox, oz, length.x, length.z); /* vp_color(BLUE); for(ii=0;ii<gnx;ii++) { vp_umove(ii*gdx+gox, goz); vp_udraw(ii*gdx+gox, (gnz-1)*gdz+goz); } for(ii=0;ii<gnz;ii++) { vp_umove(gox, ii*gdz+goz); vp_udraw((gnx-1)*gdx+gox, ii*gdz+goz); } */ } norsar_init(gnx,gnz, TETAMAX,N,alpha2,inter, nx,nz,ox,oz,dx,dz,length); /* ALGORITHM: * For every source: */ for(ii=0;ii<ns;ii++) { ste = 0; gox = goox + pos[ii].x; sf_warning("\nSource #%d\n", ii); /* 1.- Construct the inital wavefront */ nr = nang; initial (pos[ii], cube, vel, dt, nt, T, lomx, nr, out); gridding_init(gnx,gnz, gdx,gdz,gox,goz, outfile); /* run while the wavefront is not too small */ while (nr > 4) { ste++; /* 2.- Propagate wavefront */ wavefront (cube, nr, vel, dt, nt, T, lomx); if(prcube || pr) { fprintf(outfile,"\n\nwavefront"); printcube(cube, nr, outfile); } /* 3.- Get rid of caustics */ if(first) { if(ste%2==1) { caustics_up (cube, 0, nr); } else { caustics_down (cube, nr-1, nr); } if(prcube || pr) { fprintf(outfile,"\n\ncaustics"); printcube(cube, nr, outfile); } } /* 4.- Eliminate rays that cross boundaries, defined by xmin, xmax, zmin, zmax. Note that the computational grid is a little bigger than the ouput grid. */ xmin = gox-nou*gdx; xmax = 2*pos[ii].x-gox+nou*gdx; zmin = oz-nou*gdz; zmax = length.z+oz+nou*gdz; mark_pts_outofbounds (cube, nr, xmin, xmax, zmin, zmax); if(prcube) { fprintf(outfile, "\n\nboundaries"); printcube(cube, nr, outfile); } /* 5.- Rearrange cube */ makeup(cube, &nr); if(nr<4) break; if(prcube || pr) { fprintf(outfile, "\n\nmakeup"); printcube(cube, nr, outfile); } /* 6.- Calculate amplitudes for new wavefront */ amplitudes (cube, nr); if(prcube) { fprintf(outfile, "\n\namplitudes"); printcube(cube, nr, outfile); } /* 7.- Draw rays */ if(rays) draw_rays (cube, nr); /* 8.- Draw wavefront */ if(wfront && (ste%gap==0)) draw_wavefronts (cube, nr, DSmax); /* 9.- Parameter estimation at receivers */ gridding (cube, nr, out, DSmax, (ste-1)*nt*dt, vel, first); /* pos[ii]); */ /* 10.- Interpolate new points of wavefront */ interpolation (cube, &nr, nrmax, DSmax); /* 0); */ if(prcube) { fprintf(outfile,"\n\ninterpolation"); printcube(cube, nr, outfile); } /* 11.- Prepare to trace new wavefront */ movwavf (cube, nr); if(prcube) { fprintf(outfile,"\n\nmovwavf"); printcube(cube, nr, outfile); } if((wfront || rays) && (ste%gap==0)) vp_erase(); } /* Finally interpolate amplitude and traveltime values to receivers that has not being covered. */ TwoD_interp (out, gnx, gnz); sf_floatwrite(out->time, gnx * gnz, time); sf_floatwrite(out->ampl, gnx * gnz, ampl); } if(pr||prcube) fclose(outfile); exit(0); }