- Joined
- 3/21/08
- Messages
- 598
- Points
- 38
From the Attached Zip File extract program FRACTAL to your desktop and execute,
It will display the Koch Curve Fractal
Actual Code
It will display the Koch Curve Fractal
Actual Code
Code:
/***********START***************/
// elementary fractal
void fractal_Koch_curve(void){
char file_name [60] = "c:\\exsan\\Fractal_The_Koch_curve_______0000.bmp";
bool sign_this = 1;
bool display = 1;
bool save_image = 1;
bool sign_bg = 1;
bool negative = 1;
bool do_grey_scale = 0;
print("http://classes.yale.edu/fractals/");
char * string = "PixSan FRACTAL";
unsigned long int side = 401;
enum {temp, page_alphabet, page_signature, page};
long int yo, xo, yf, xf;
NETPTR net = NULL;
net = net->create_exsan_net(page, side, side );
net->set_work_sheet(page, side, side);
if(save_image){
net->set_file_image(net, page_alphabet, file_name);
print("Master File: ", file_name);
}
if(sign_this){
net->set_work_sheet(page_signature, side, side);
}
unsigned long int param;
CELLPTR ptr_a, ptr_b, ptr_c, ptr_center;
ptr_center = net->go_to(net, page, side/2 + 1, side/2 + 1);
do{
printing("\n [0...", side/2,"] EXIT - Parameter");
cin >> param;
if(!param) exit;
ptr_a = net->Move_to(net, ptr_center, page, 0, (long)param, 1);
ptr_b = net->Move_to(net, ptr_center, page, (long)param*sqrt(3.)/2., -(long)param/2., 1);
ptr_c = net->Move_to(net, ptr_center, page, -(long)param*sqrt(3.)/2., -(long)param/2., 1);
basic_fracatal(net, page, ptr_a->get_row(), ptr_a->get_col(), ptr_b->get_row(), ptr_b->get_col(), param+70);
basic_fracatal(net, page, ptr_b->get_row(), ptr_b->get_col(), ptr_c->get_row(), ptr_c->get_col(), param+70);
basic_fracatal(net, page, ptr_c->get_row(), ptr_c->get_col(), ptr_a->get_row(), ptr_a->get_col(), param+70);
net->display_image(net, page, page_signature, string, file_name, sign_this, display, sign_bg, save_image, negative, do_grey_scale);
}while(1);
net->delete_exsan_net(net); // freeing memory
return;
}
void basic_fracatal(NETPTR net, unsigned long page, long yo, long xo, long yf, long xf, unsigned short tint){
unsigned long int param = tint % 255; // 255 white
long int xo_t, yo_t, xf_t, yf_t ;
double angle, delta_y = yf - yo;
double m, delta_x = xo - xf;
bool fractal = 1;
double side = sqrt(delta_x * delta_x + delta_y * delta_y); //(long)
if(side < param) return; // exit recursive exit 10
m = delta_y/delta_x;
if(fractal)basic_fracatal(net, page, yo, xo, yo + (yf - yo)/3., xo + (xf - xo)/3, tint);
net->draw_line(net, page, xo , yo, xo + (xf - xo)/3., yo + (yf - yo)/3., tint); // 1st
xo_t = xo, yo_t = yo;
xf_t = xo + (xf - xo)/3., yf_t = yo + (yf - yo)/3.;
net->draw_line(net, page, xo_t + (xf_t - xo_t)/3., yo_t + (yf_t - yo_t)/3., xf_t - (xf_t - xo_t)/3., yf_t - (yf_t - yo_t)/3. , 0); // 0 - black
if(fractal)basic_fracatal(net, page, yf - (yf - yo)/3., xf - (xf - xo)/3., yf, xf, tint);
net->draw_line(net, page, xf - (xf - xo)/3., yf - (yf - yo)/3., xf, yf, tint); // last
xo_t = xf - (xf - xo)/3., yo_t = yf - (yf - yo)/3. ;
xf_t = xf, yf_t = yf ;
net->draw_line(net, page, xo_t + (xf_t - xo_t)/3., yo_t + (yf_t - yo_t)/3., xf_t - (xf_t - xo_t)/3., yf_t - (yf_t - yo_t)/3. , 0); // 0 - black
angle = atan(m);
if(!delta_x){
if(delta_y > 0) angle -= pi/2.;
else angle += pi/2.;
}
else{
if(!delta_y){
if(delta_x < 0) { }
else angle -= pi;
}
else{
if(delta_x > 0 && delta_y > 0 ){ angle += pi; }
if(delta_x > 0 && delta_y < 0 ){ angle += pi; }
if(delta_x < 0 && delta_y > 0 ){ angle += pipi;}
if(delta_x < 0 && delta_y < 0 ){ /* */ }
}
}
angle += pi/3.;
delta_x = side/3.*cos(angle);
delta_y = -side/3.*sin(angle);
if(fractal)basic_fracatal(net, page, yo + (yf - yo)/3., xo + (xf - xo)/3., delta_y + yo + (yf - yo)/3., delta_x + xo + (xf - xo)/3., tint);
net->draw_line(net, page, xo + (xf - xo)/3., yo + (yf - yo)/3., delta_x + xo + (xf - xo)/3., delta_y + yo + (yf - yo)/3., tint);
xo_t = xo + (xf - xo)/3., yo_t = yo + (yf - yo)/3.;
xf_t = delta_x + xo + (xf - xo)/3., yf_t = delta_y + yo + (yf - yo)/3.;
net->draw_line(net, page, xo_t + (xf_t - xo_t)/3., yo_t + (yf_t - yo_t)/3., xf_t - (xf_t - xo_t)/3., yf_t - (yf_t - yo_t)/3. , 0);
if(fractal)basic_fracatal(net, page, delta_y + yo + (yf - yo)/3., delta_x + xo + (xf - xo)/3., yf - (yf - yo)/3., xf - (xf - xo)/3., tint);
net->draw_line(net, page, delta_x + xo + (xf - xo)/3., delta_y + yo + (yf - yo)/3., xf - (xf - xo)/3., yf - (yf - yo)/3. , tint);
xo_t = delta_x + xo + (xf - xo)/3., yo_t = delta_y + yo + (yf - yo)/3.;
xf_t = xf - (xf - xo)/3., yf_t = yf - (yf - yo)/3.;
net->draw_line(net, page, xo_t + (xf_t - xo_t)/3., yo_t + (yf_t - yo_t)/3., xf_t - (xf_t - xo_t)/3., yf_t - (yf_t - yo_t)/3. , 0); // 0 black
return;
}
/***********END*****************/