배열로 원 그리기/원 그리기 프로그램

1884 단어 CircleCarrayDraw

0. 개요



문득 프로그램으로 원의 그리기를 하고 싶었지만, 어떻게 하는 거야?
원의 방정식을 풀고, 브레젠햄 알고리즘으로 타일을 메우는 것인가··? 라고 고민하고 있던 곳, 이하의 사이트를 발견.
htp://푸시. 웨 b. FC2. 소 m/아l5/아l후2-1. htm

움직여 보니 쉽게 원을 그릴 수 있게 되었다. 놀라운


비망록으로 남겨둔다.

1. 구현


#include <stdio.h>
#define CANVAS_SIZE_X 20
#define CANVAS_SIZE_Y 20
int canvas[CANVAS_SIZE_X][CANVAS_SIZE_Y];


void set_dot(int _x, int _y) {
    canvas[_x][_y] = 1;
    return;
}

void circle(int x0, int y0, int r)
{
    int x = r;
    int y = 0;
    int F = -2 * r + 3;
    while (x >= y) {
        set_dot(x0 + x, y0 + y);
        set_dot(x0 - x, y0 + y);
        set_dot(x0 + x, y0 - y);
        set_dot(x0 - x, y0 - y);
        set_dot(x0 + y, y0 + x);
        set_dot(x0 - y, y0 + x);
        set_dot(x0 + y, y0 - x);
        set_dot(x0 - y, y0 - x);
        if (F >= 0) {
            x--;
            F -= 4 * x;
        }
        y++;
        F += 4 * y + 2;
    }
}

void disp() {
    printf("---------------------------------------------\n");
    for (int i = 0; i < CANVAS_SIZE_Y; i++) {
        for (int j = 0; j < CANVAS_SIZE_X; j++) {
            printf("%d ", canvas[j][i]);
        }
        printf("\n");
    }
    printf("---------------------------------------------\n");
    return;
}

int main() {

    // Init
    for (int i = 0; i < CANVAS_SIZE_Y; i++) {
        for (int j = 0; j < CANVAS_SIZE_X; j++) {
            canvas[j][i] = 0;
        }
    }
    disp();
    circle(10, 10, 6);
    disp();

    getchar();
    return 0;
}


좋은 웹페이지 즐겨찾기