diff options
| -rw-r--r-- | attract.c | 19 | 
1 files changed, 10 insertions, 9 deletions
| @@ -15,7 +15,7 @@  const int MAXITER=200;  const double EPS=1e-1; -static double complex att_func(double complex x){ +static double complex att_func(double complex x,double exponent){  #if 0  	static const int N=9; @@ -27,8 +27,7 @@ static double complex att_func(double complex x){  	r+=y;  	return clog(r);  #else -	static const double N=8.5; -	return clog((1-cpow(x,N+1))/(1-x)); +	return clog((1-cpow(x,exponent+1))/(1-x));  #endif  } @@ -49,8 +48,9 @@ static struct colour make_colour(int index){  }  struct config{ -	const double unitsz; -	const int width,height; +	double unitsz; +	int width,height; +	double exponent;  };  struct thread_info{ @@ -86,7 +86,7 @@ static void* thread_entry(void *arg_vp){  					(double)(iy-cfg.height/2)/cfg.unitsz);  			double complex z=start;  			for(int i=0;i<MAXITER;i++){ -				z=att_func(z); +				z=att_func(z,cfg.exponent);  			}  			if(do_basins){  				int bi; @@ -121,8 +121,9 @@ static void* thread_entry(void *arg_vp){  int main(void){  	struct config cfg={ -		200, -		500, 500 +		.unitsz=200, +		.width=500, .height=500, +		.exponent=8.5  	};  	unsigned char img[cfg.width*cfg.height*3]; @@ -145,7 +146,7 @@ int main(void){  		ths[i].yend=(i+1)*cfg.height/nthreads;  		ths[i].img=img;  		ths[i].do_basins=nthreads==1; -		memcpy(&ths[i].cfg,&cfg,sizeof(struct config)); +		ths[i].cfg=cfg;  		int ret=pthread_create(&ths[i].th,&attr,thread_entry,&ths[i]);  		if(ret!=0){  			perror("pthread_create"); | 
