Files
Arquivotheca.SunOS-4.1.4/games/tool/life/circle.c
seta75D ff309bfe1c Init
2021-10-11 18:37:13 -03:00

87 lines
2.0 KiB
C

#ifndef lint
static char sccsid[] = "@(#)circle.c 1.1 94/10/31 Copyr 1984 Sun Micro";
#endif
/*
* Copyright (c) 1984 by Sun Microsystems Inc.
*/
#include <math.h>
#include <stdio.h>
/*
* Circle: usage: circle length thickness
*
* Computes circle on length by length square grid. Circle has
* thickness pixels.
* Prints out picture of dots that should be colored. Of course the
* picture looks very oval, because a character is much taller than it
* is wide.
*
* The center has coordinates (0,0). The upper
* left hand dot has coordinates (-(length-1)/2, (length-1)/2).
* The circle has radius length/2.
*/
#define MAXLENGTH 64 /* length must be less than this */
#define CHAR 1 /* char used to print out picture */
char circlearr[MAXLENGTH][MAXLENGTH];
double sqroot();
drawcircle (diameter, white, thickness)
{
float a, b, x, y, radius, corner, center;
int i, j;
radius = diameter/2.0;
corner = (diameter-1)/2.0;
center = (diameter & 01) ? 0 : 0.5;
if (diameter == 1) {
circlearr[0][0] = 1;
return;
}
if (diameter == 2) {
circlearr[0][0] = 1;
circlearr[1][0] = 1;
circlearr[0][1] = 1;
circlearr[1][1] = 1;
return;
}
if (thickness > corner) {
fprintf (stderr, "thickness must be less than %g\n", corner);
exit(1);
}
for (x = -corner, i = 0; x <= -center; x++, i++) {
a = sqroot(radius * radius - x * x);
b = sqroot((radius-thickness) * (radius-thickness) - x * x);
if (!white)
b = 0;
for (y = corner, j = (diameter-1); y >= center; y--, j--)
if (a >= y && y >= b) {
circlearr[i][j] = CHAR;
circlearr[diameter - 1 - i][j] = CHAR;
circlearr[i][diameter - 1 - j] = CHAR;
circlearr[diameter-1-i][diameter-1-j] = CHAR;
}
else {
circlearr[i][j] = 0;
circlearr[diameter - 1 - i][j] = 0;
circlearr[i][diameter - 1 - j] = 0;
circlearr[diameter-1-i][diameter-1-j] = 0;
}
}
}
double
sqroot(z)
double z;
{
if (z <= 0)
return ((double)0);
else
return (sqrt(z));
}