⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ellipse.cpp

📁 空战游戏flacon源码
💻 CPP
字号:
#include <stdio.h>
#include <math.h>

#define	MAXSIZE	64

void Ellipse (int sizex, int sizey, int centerx, int *array, int maxsize);

int array[MAXSIZE];
void main ()
{
	int	sizex, sizey, i, j;

	sizex = MAXSIZE/2; sizey = MAXSIZE/2;
	for (i=0; i < MAXSIZE/2; i++) {

		if (i > MAXSIZE/4) sizex = MAXSIZE/2 - (i - MAXSIZE/4) * MAXSIZE/16;
		else sizex = MAXSIZE/2 - i * MAXSIZE/16;
		Ellipse (sizex, sizey, MAXSIZE/2, array, MAXSIZE);
		if (sizex < 0) {
			for (j=0; j < MAXSIZE;j++) array[j] = MAXSIZE - array[j];
		}

		printf ("Ellipse %dx%d\n", sizex, sizey);
		for (j=0; j < MAXSIZE;j++) {
			printf ("%2d", array[j]);
			if ((j+1) & 15) printf (" ");
			else printf ("\n");
		}
		printf ("\n");
	}
}

void Ellipse (int a, int b, int centerx, int *array, int maxsize)
{
	int counter = 0;
	int flag = 1;
	int x = 0; 
	int y = b;
	int xpos = centerx;
	float aa = (float) a * a;
	float bb = (float) b * b;
	float d1 = bb - aa*b + aa / 4.0f;
	while (aa * ((float) y - 0.5f) > bb * ((float) x + 1.0f)) {
		if (d1 < 0.0f) {
			d1 += bb * ((float) (x << 1) + 3.0f);
			x++;
			xpos++;
		}
		else {
			if (flag) {
				array[counter++] = xpos;
				flag = 0;
			}
			d1 += bb * ((float) (x << 1) + 3.0f) + aa * ((float) (-y << 1) + 2.0f);
			x++;
			xpos++;
			y--;
			array[counter++] = xpos;
		}
	}

	float x1 = (float) x + 0.5f;
	float y1 = (float) y - 1.0f;
	float d2 = bb * x1*x1 + aa * y1*y1 - aa*bb;
	while (y > 0) {
		if (d2 < 0.0f) {
			if (flag) {
				array[counter++] = xpos;
				flag = 0;
			}
			d2 += bb * ((float) (x << 1) + 2.0f) + aa * ((float) (-y << 1) + 3.0f);
			x++;
			xpos++;
			y--;
		}
		else {
			d2 += aa * ((float) (-y << 1) + 3.0f);
			y--;
		}
		array[counter++] = xpos;
	}

	int	i;
	for (i=0; i < maxsize/2;i++) array[maxsize-1-i] = array[i];
}


/*
	if (i) {
		int	array[64];
		int	sizex;
		int	reverse;
		
		if (i > 16) {
			sizex = 32 - ((i - 16) << 2);
			reverse = 1;
		}
		else {
			sizex = 32 - (i << 2);
			reverse = 0;
		}

		int counter = 0;
		int flag = 1;
		int x = 0; 
		int y = 32;
		int xpos = 32;
		float aa = (float) sizex * sizex;
		float bb = (float) 32 * 32;
		float d1 = bb - aa*32 + aa / 4.0f;
		while (aa * ((float) y - 0.5f) > bb * ((float) x + 1.0f)) {
			if (d1 < 0.0f) {
				d1 += bb * ((float) (x << 1) + 3.0f);
				x++;
				xpos++;
			}
			else {
				if (flag) {
					array[counter++] = xpos;
					flag = 0;
				}
				d1 += bb * ((float) (x << 1) + 3.0f) + aa * ((float) (-y << 1) + 2.0f);
				x++;
				xpos++;
				y--;
				array[counter++] = xpos;
			}	
		}

		float x1 = (float) x + 0.5f;
		float y1 = (float) y - 1.0f;
		float d2 = bb * x1*x1 + aa * y1*y1 - aa*bb;
		while (y > 0) {
			if (d2 < 0.0f) {
				if (flag) {
					array[counter++] = xpos;
					flag = 0;
				}
				d2 += bb * ((float) (x << 1) + 2.0f) + aa * ((float) (-y << 1) + 3.0f);
				x++;
				xpos++;
				y--;
			}
			else {
				d2 += aa * ((float) (-y << 1) + 3.0f);
				y--;
			}
			array[counter++] = xpos;
		}

		int	j;
		for (j=0; j < 32;j++) array[63-j] = array[j];
		if (sizex < 0) {
			for (j=0; j < 64;j++) array[j] = 64 - array[j];
		}

		if (reverse) {
		}
		else {
		}
	}
*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -