/* ╔═══════════════════════════════════════════════════════════════╗
║ ║
║ ║
║ twindrag = PROGRAM TO GENERATE A TWIN DRAGON ║
║ ║
╚═══════════════════════════════════════════════════════════════╝
*/
#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 sign);
int combination = 0,LINEWIDTH=1, OPERATOR=0, ANGLE, XCENTER, YCENTER;
unsigned long int PATTERN=0xFFFFFFFF;
float turtle_theta;
int i,flag[24],color = 10;
int generator_size = 3;
int level = 16;
int init_size = 2;
int initiator_x1[10] = {-150,150},initiator_x2[10]={150,-150},
initiator_y1[10]={-25,-25},
initiator_y2[10]={-25,-25};
float Xpoints[25], Ypoints[25];
float turtle_x,turtle_y,turtle_r;
main()
{
int sign = 1;
setMode(16);
cls(1);
for (i=0; i<init_size; i++)
{
generate(initiator_x1[i], initiator_y1[i], initiator_x2[i],
initiator_y2[i], level, sign);
color = 13;
}
getch();
}
/* ╔═════════════════════════════════════════════════════════╗
║ ║
║ generate() = Generates curve ║
║ ║
╚═════════════════════════════════════════════════════════╝*/
void generate (float X1, float Y1, float X2, float Y2, int level, int sign)
{
int j,k,line,sign2=-1;
float a, b, Xpoints[25], Ypoints[25];
turtle_r = (sqrt((X2 - X1)*(X2 - X1) + (Y2 - Y1)*(Y2 - Y1)))/1.41421;
Xpoints[0] = X1;
Ypoints[0] = Y1;
Xpoints[2] = X2;
Ypoints[2] = Y2;
turtle_theta = point(X1,Y1,X2,Y2);
turtle_x = X1;
turtle_y = Y1;
turn(sign*(45));
step();
Xpoints[1] = turtle_x;
Ypoints[1] = turtle_y;
level--;
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,sign2);
sign2 *= -1;
}
}
else
{
for (k=0; k<generator_size-1; k++)
{
drawLine(Xpoints[k],Ypoints[k],
Xpoints[k+1],Ypoints[k+1],color);
}
}
}