配列で円を描く/円の描画プログラム
0. 概要
ふとプログラムで円の描画をしたくなったが、どうやるんだ?
円の方程式を解いて、ブレゼンハムアルゴリズムでタイルを埋めるのか・・?と悩んでいたところ、以下のサイトを発見。
http://fussy.web.fc2.com/algo/algo2-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;
}
#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;
}
Author And Source
この問題について(配列で円を描く/円の描画プログラム), 我々は、より多くの情報をここで見つけました https://qiita.com/harmegiddo/items/711c478058aa7a770960著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .