📄 ellipse.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 + -