Metropoli BBS
VIEWER: snoflake.c MODE: TEXT (CP437)
/*          ╔═══════════════════════════════════════════════════════════════╗
            ║                                                               ║
            ║                                                               ║
	    ║         snoflake() = PROGRAM TO GENERATE KOCH SNOWFLAKE       ║
            ║                                                               ║
            ╚═══════════════════════════════════════════════════════════════╝
*/

#include <stdio.h>
#include <math.h>
#include <dos.h>
#include "tools.h"

void generate (float X1, float Y1, float X2, float Y2, int level);

int combination = 0,LINEWIDTH=1, operator=0, ANGLE, XCENTER, YCENTER;
unsigned long int PATTERN=0xFFFFFFFF;
float turtle_theta;
int i;
int generator_size = 5;
int level;
int init_size = 3;
int initiator_x1[10] = {-150,0,150},initiator_x2[10]={0,
	150,-150},initiator_y1[10]={-75,185,-75},
	initiator_y2[10]={185,-75,-75};
float Xpoints[25], Ypoints[25];
float turtle_x,turtle_y,turtle_r;

main()
{

	printf("\nEnter level (1 - 8): ");
	scanf("%d",&level);
	if (level < 1)
		level = 1;
	setMode(16);
 	cls(0);

	for (i=0; i<init_size; i++)
	{
		generate(initiator_x1[i], initiator_y1[i], initiator_x2[i],
			initiator_y2[i], level);
	}
	getch();
}

	     /*╔═════════════════════════════════════════════════════════╗
               ║                                                         ║
               ║                 generate() = Generates curve            ║
               ║                                                         ║
               ╚═════════════════════════════════════════════════════════╝*/

void generate (float X1, float Y1, float X2, float Y2, int level)
{
	int j,k,line;
        float a, b, Xpoints[25], Ypoints[25];

	level--;
	turtle_r = (sqrt((X2 - X1)*(X2 - X1) + (Y2 - Y1)*(Y2 - Y1)))/3.0;
	Xpoints[0] = X1;
	Ypoints[0] = Y1;
	Xpoints[4] = X2;
	Ypoints[4] = Y2;
	turtle_theta = point(X1,Y1,X2,Y2);
	turtle_x = X1;
	turtle_y = Y1;
	step();
	Xpoints[1] = turtle_x;
	Ypoints[1] = turtle_y;
	turn(60);
	step();
	Xpoints[2] = turtle_x;
	Ypoints[2] = turtle_y;
        turn(-120);
	step();
	Xpoints[3] = turtle_x;
	Ypoints[3] = turtle_y;
	if (level > 0)
	{
		for (j=0; j<generator_size-1; j++)
		{
          		X1 = Xpoints[j];
          		X2 = Xpoints[j+1];
          		Y1 = Ypoints[j];
          		Y2 = Ypoints[j+1];
			generate (X1,Y1,X2,Y2,level);
		}
	}
	else
	{
		for (k=0; k<generator_size-1; k++)
		{
			drawLine(Xpoints[k],Ypoints[k],
				Xpoints[k+1],Ypoints[k+1],15);
		}
	}
}


[ RETURN TO DIRECTORY ]