Metropoli BBS
VIEWER: twindrag.c MODE: TEXT (CP437)
/*          ╔═══════════════════════════════════════════════════════════════╗
            ║                                                               ║
            ║                                                               ║
            ║          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);
		}
	}
}

[ RETURN TO DIRECTORY ]