Exemplo n.º 1
0
bullet *bullet_init(const point start, const double direction,
                    const double damage) {
  bullet *b = (bullet *) malloc(sizeof(bullet));
  b->start.x = start.x;
  b->start.y = start.y;
  b->speed = BULLET_SPEED;
  b->direction = direction;
  b->v = velocity_init(b->speed, b->direction);
  b->is_used = false;
  b->next = NULL;
  return b;
}
Exemplo n.º 2
0
void bullet_add(bullet *bullets, const point start,
                const double direction, const double damage) {
  bullet *iter = NULL, *new_bullet;
  if (bullets != NULL) {
    iter = bullets;
    while (iter->next != NULL) {
      iter = iter->next;
    }

    // create new bullet
    new_bullet = (bullet *) malloc(sizeof(bullet));
    new_bullet->start.x = start.x;
    new_bullet->start.y = start.y;
    new_bullet->speed = BULLET_SPEED;
    new_bullet->direction = direction;
    new_bullet->v = velocity_init(new_bullet->speed, new_bullet->direction);
    new_bullet->is_used = false;
    new_bullet->next = NULL;

    iter->next = new_bullet;
  }
}
Exemplo n.º 3
0
int main(int argc, char **argv)
{
    struct shot_data_par_type   data_par;
    struct shot_plane_par_type   plane_par;
    struct shot_image_par_type  image_par;
    struct shot_ker_par_type    ker_par;
    struct shot_rotate_par_type rotate_par;
    sf_file velocity,wave;
    float mig_dx,mig_dy,mig_dz,mig_min_x,mig_min_y,fd_a,fd_b,trick,w;
    int op,mig_nz,mig_nx,mig_ny,tmp_mig_nx;
    int mig_nx_rotate,mig_nz_rotate,mig_ny_rotate;
    float rotate_angle;
    float epvalue,dlvalue;

    int i_sy,i_sx,iw,iz;
    float *vel,*ep,*dl,*image_z,*image,*image_rotate,*v_z;
    sf_complex *wld_s,*wld_r,*wld_s_z0,*wld_r_z0,*wld_s_tilt,*wld_r_tilt;
    float *image_1hx,**image_rotate_allhx,**image_rotate_allhz;
    int ixz,ihx;
    int data_nsy, ix;
    int mig_size,image_size;
    float dkx; int bx,ex,nx_iz;
    float ttmprotate=1.0;
    float t;
    bool vti;
    float a1,b1,a2,b2;

    sf_init(argc,argv);
    if (!sf_getfloat("t",&t))    t=0.8;
    if (!sf_getfloat("ep",&epvalue)) epvalue=0.4;
    if (!sf_getfloat("dl",&dlvalue)) dlvalue=0.2;
    if (!sf_getbool("vti",&vti)) vti=true;
    a1=0.040315157; b1=0.873981642;
    a2=0.457289566; b2=0.222691983;

    a1=0.659558; b1=0.790347;
    a2=0.030433; b2=1.692681;

    velocity_init(&velocity);
    //velocity_ani_init(&eps, &dlt);
    data_par=shot_data_init();
    sf_warning("nsy=%d  nsx=%d",data_par.nsy,data_par.nsx); 
    shot_data_wavelet(data_par);
    image_par=shot_image_grab_par();

    mig_dx=data_par.dhx; mig_dy=data_par.dhy;
    mig_grab_par(&op,&mig_nz,&mig_dz,&fd_a,&fd_b,&trick);
    shot_image_init(mig_dx,mig_dy,mig_dz,mig_nz,&image_par); 
  
    wave = sf_output("wave");
    sf_putfloat(wave,"d1",mig_dx);
    sf_putfloat(wave,"d2",mig_dy);
    sf_putfloat(wave,"d3",mig_dz);
  
    data_nsy=data_par.nsy; 
    /* data_nsx=data_par.nsx; */

    for(i_sy=0;i_sy< data_nsy;i_sy++){
	for(i_sx=0;i_sx< 1;i_sx++){
	    shot_data_plane_grab_mig_par(i_sx,i_sy,&mig_min_x,&mig_min_y,&tmp_mig_nx,&mig_ny,data_par,&plane_par );
	    mig_nx=tmp_mig_nx;
	    sf_warning("nx---------------%d",mig_nx); 
	    rotate_angle=asin( (i_sx*data_par.dsx+data_par.osx)*1500.0);
      
	    rotate_angle=-50.0/180.0*SF_PI;
	    rotate_angle=0.0/180.0*SF_PI;

	    rotate_par=shot_rotate_init(rotate_angle,tmp_mig_nx,mig_nz,mig_dx,mig_dz);
	    sf_warning("nx=%d,nz=%d,ny=%d",rotate_par.nx_rotate,rotate_par.nz_rotate,rotate_par.ny_rotate);
	    mig_nx_rotate=rotate_par.nx_rotate; mig_ny_rotate=rotate_par.ny_rotate;
	    mig_nz_rotate=rotate_par.nz_rotate;
      
	    mig_size=mig_nx_rotate*mig_ny_rotate; image_size=mig_size*image_par.nhy*image_par.nhx*mig_nz_rotate;

	    ker_par=shot_ker_p_init(op,mig_nx_rotate,mig_ny_rotate,mig_dx,mig_dy,mig_dz,fd_a,fd_b,trick,1,ttmprotate);
	    vel=sf_floatalloc(mig_size*mig_nz_rotate); 
	    wld_s=sf_complexalloc(SF_MAX(mig_size,mig_nx*mig_ny_rotate)); 
	    wld_r=sf_complexalloc(SF_MAX(mig_size,mig_nx*mig_ny_rotate));
	    ep=sf_floatalloc(mig_size*mig_nz_rotate); dl=sf_floatalloc(mig_size*mig_nz_rotate);
	    sf_warning("nz_s_rotate=%d",rotate_par.nz_s_rotate);
	    //if (0.0!=rotate_angle){
	    wld_s_z0=sf_complexalloc(mig_size*rotate_par.nz_s_rotate); wld_r_z0=sf_complexalloc(mig_size*rotate_par.nz_s_rotate);
	    //}
	    image=sf_floatalloc(image_size); vector_value_f(image,0.0,image_size);
      
	    sf_putint(wave,"n2",mig_nx_rotate);
	    sf_putfloat(wave,"o2",0.0);
	    sf_putint(wave,"n1",mig_nz_rotate);

	    if (rotate_par.rotate_angle>=0.0) 
		sf_putfloat(wave,"o2",mig_min_x); 
	    else 
		sf_putfloat(wave,"o2",mig_min_x+(mig_nx-1)*mig_dx);

	    velocity_read(velocity,vel,wave,rotate_par.rotate_angle,rotate_par.ix_rotate_center); 
	    veltranspose(vel,mig_ny_rotate,mig_nx_rotate,mig_nz_rotate);
      
	    for(iw=0;iw<data_par.nw; iw++){ 
		w=iw*data_par.dw+data_par.ow;
		sf_warning("iw=%d  w=%f;",iw,w);
           
		shot_plane_source(mig_min_x,mig_min_y,mig_nx,mig_ny,iw,i_sx,i_sy,wld_s,data_par,plane_par);
		shot_plane_receiver(mig_min_x,mig_min_y,mig_nx,mig_ny,iw,i_sx,i_sy,wld_r,data_par,plane_par);
		shot_rotate_data_rotate(wld_r,wld_r_z0,&rotate_par);
		shot_rotate_data_rotate(wld_s,wld_s_z0,&rotate_par);
		vector_value_c(wld_s,sf_cmplx(0.0,0.0),mig_size); 
		vector_value_c(wld_r,sf_cmplx(0.0,0.0),mig_size); //wld_r=0.0  wld_s=0.0
        
		for(iz=0;iz<mig_nz_rotate;iz++){
		    image_z=image+mig_size*image_par.nhy*image_par.nhx*iz;
		    if (iz <rotate_par.nz_s_rotate){
			for(ix=0;ix<mig_nx_rotate;ix++) wld_s[ix]+=wld_s_z0[i2(iz,ix,mig_nx_rotate)];  //wld_s+=wld_s_z0(iz,:,:);
			for(ix=0;ix<mig_nx_rotate;ix++) wld_r[ix]+=wld_r_z0[i2(iz,ix,mig_nx_rotate)];  //wld_r+=wld_r_z0(iz,:,:);
		    }
		    if ( 0.0!=rotate_angle){
			shot_rotate_get_bx_ex_iz(&dkx,&bx,&ex,iz,20,rotate_par);
			nx_iz=ex-bx+1;  ker_par.dkx=dkx; ker_par.nx=nx_iz;
			v_z=vel+iz*mig_size+bx; wld_s_tilt=wld_s+bx; wld_r_tilt=wld_r+bx; image_z+=image_par.nhy*image_par.nhx*bx;
			/* ep_z=ep+iz*mig_size+bx; dl_z=dl+iz*mig_size+bx; */
		    }
		    else{
			v_z=vel+iz*mig_size; wld_s_tilt=wld_s; wld_r_tilt=wld_r; /* ep_z=ep+iz*mig_size; dl_z=dl+iz*mig_size; */
			nx_iz=mig_nx_rotate;
		    }
		    if (vti)
			shot_ker_depth_onestep_impulse(wld_s_tilt,v_z,w,-1,epvalue,dlvalue,ker_par);
		    else
			shot_ker_depth_onestep_fd2(wld_s_tilt,v_z,w,-1,a1,b1,a2,b2,ker_par); 
		    //shot_ker_depth_onestep(wld_s_tilt,v_z,w,-1,ker_par);
		    //shot_ker_depth_onestep(wld_r_tilt,v_z,w,+1,ker_par); 
		    vector_value_c(wld_r,sf_cmplx(cosf(w*t),sinf(w*t)),mig_nx_rotate);
		    //printf("max=%f\n",maxvalc(wld_r,mig_nx_rotate));
		    shot_image_cross_tilt(wld_s_tilt,wld_r_tilt,image_z,mig_nx_rotate,mig_ny_rotate,image_par,nx_iz);
          
		}
	    }
	    sf_warning(".");
	    shot_ker_release(&ker_par);
	    free(wld_s); free(wld_r);free(vel); free(ep); free(dl); 
	    if (0.0!=rotate_angle){
		free(wld_s_z0); free(wld_r_z0); 
	    }

	    image_rotate=sf_floatalloc(mig_nx*mig_nz);  
	    image_1hx=sf_floatalloc(mig_size*mig_nz_rotate);
	    image_rotate_allhx=sf_floatalloc2(image_par.nhx,mig_nx*mig_nz);
     
	    for (ihx=0;ihx<image_par.nhx;ihx++){
		//printf("ihx=%d\n",ihx);
		for(ixz=0;ixz<mig_size*mig_nz_rotate;ixz++) image_1hx[ixz]=image[i2(ixz,ihx,image_par.nhx)];
		shot_rotate_image_rotate(image_1hx,image_rotate,rotate_par); 
		for(ixz=0;ixz<mig_nx*mig_nz;ixz++) image_rotate_allhx[ixz][ihx]=image_rotate[ixz]*1.0;
	    }
      
       
 
	    free(image); //rotate image 
	    //stat=auxputch ("rotate_angle","f",&rotate_angle,"Image_hx");

	    if (rotate_angle !=0.0){
		image_rotate_allhz=sf_floatalloc2(mig_nx*mig_nz, image_par.nhx);
		shot_image_decompose(*image_rotate_allhx, *image_rotate_allhz,mig_nx,mig_nz,rotate_angle,image_par);
		sf_warning("ishot=%d,maxhx=%f,maxhz=%f",
			   i_sx,
			   maxval(*image_rotate_allhx,mig_nx*mig_nz*image_par.nhx),
			   maxval(*image_rotate_allhz,mig_nx*mig_nz*image_par.nhx));
        
		shot_image_stack(*image_rotate_allhz,mig_min_x,mig_min_y,mig_nx,mig_ny,image_par.imagez,image_par);
		free(*image_rotate_allhz);
		free(image_rotate_allhz);
	    }


	    shot_image_stack(*image_rotate_allhx,mig_min_x,mig_min_y,mig_nx,mig_ny,image_par.imagex,image_par); 
	    free(image_rotate); // rite image
      
	    free(image_1hx); 
	    free(*image_rotate_allhx);
	    free(image_rotate_allhx);
	    shot_rotate_release(&rotate_par);
	}
    }
    shot_data_release(&data_par);
    shot_image_release(&image_par);
     
    exit(0);
}