/* ╔═══════════════════════════════════════════════════════════════╗
║ ║
║ ║
║ 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);
}
}
}