電子書籍の厳選無料作品が豊富!

C言語で以下のような円(楕円になってしまいました)を描きたいのですが、どのようにやればいいでしょうか? 
............XXXXXXX...........
..........XX.......XX.........
........XX...........XX.......
.......X...............X......
......X.................X.....
.....X...................X....
.....X...................X....
....X.....................X...
....X.....................X...
...X.......................X..
...X.......................X..
...X.......................X..
...X.......................X..
...X.......................X..
...X.......................X..
...X.......................X..
....X.....................X...
....X.....................X...
.....X...................X....
.....X...................X....
......X.................X.....
.......X...............X......
........XX...........XX.......
..........XX.......XX.........
............XXXXXXX...........

A 回答 (4件)

「DDA」「Circle」「Draw」でGoogle(^o^)



日本語では、見つかりませんでした。英語で良ければ、上記3語で探してください。(丸投げ禁止ということなので、「知識が残る」様にしてみました。(^^;))

ちなみに、DDAは「デジタル微分解析」ではなかったかと記憶しております。

(昔は、マシン語で円、直線を書くのに、自分で計算して点を打つのは当たり前だったのですが・・・(^^;))

参考URL:http://www.cs.stevens.edu/~quynh/courses/cs537-f …

この回答への補足

一応以下のプログラムを作成しようとしたのですが、点を打つ関数の中身がぜんぜんわかりません。お教え願えないでしょうか?ちなみにbresenhamの関数を利用しています。

#include<stdio.h>

void pset(int x, int y){
ここがぜんぜんわかりません
}

void circle(int r){
int x0 = 10;
int y0 = 10;
int x,y,F;

x = r;
y = 0;
F = -2 * r + 3;

while ( x >= y ) {
pset( x0 + x, y0 + y );
pset( x0 - x, y0 + y );
pset( x0 + x, y0 - y );
pset( x0 - x, y0 - y );
pset( x0 + y, y0 + x );
pset( x0 - y, y0 + x );
pset( x0 + y, y0 - x );
pset( x0 - y, y0 - x );
if ( F >= 0 ) {
x--;
F -= 4 * x;
}
y++;
F += 4 * y + 2;
}
}

main(){
int r;
printf("Input a radius : ");
scanf("%d", r);
printf("?n");
circle(r);
}

補足日時:2005/03/08 04:07
    • good
    • 0
この回答へのお礼

やっとできました。
貴重なご意見ありがとうございました。

お礼日時:2005/03/31 07:43

「デジタル積分」で「円」を書くのですね。



・・・・あ、忘れている(^^;)。

たしか、ASCIIの「実習グラフィック」「応用グラフィック」の中にBASICで書かれたプログラムがあったと思います。

(斜線なら覚えているのですが・・・(^^;))
    • good
    • 0

> 私の考えでは極座標(x=rcosθ, y=rsinθ)を使うのかなぁと思うのですが、



それでも出来ます。
その式を使ってこんな感じでx,yを求めてみました、のような事を提示しては?

1) θ:0~π/4(90°)までの1/4円の座標を、
x=1.00, y=0.00
x=0.98, y=0.03
x=0.95, y=0.06

と表示する。

2) 「.」「x」でy=x^2(0<=x)などのグラフを描いてみる。

3) 「.」「x」で1/4円を描いてみる。

4) 「.」「x」で円を描いてみる。

などと、段階的に進めて行くと良いと思います。
分からない点は、疑問点を絞り込んで別途質問する方が良いと思います。

--
元の質問自体、課題の丸投げという事で削除対象になると思いますし、苦労して上のようなアドバイスを書いた質問が削除されると、回答者としてはガックシです。

これこれこういう風にしました。ここがこうなるハズなのに、こうなってしまいます。ここが原因だと思うけど、上手く直せません…

のような、
・初心者の場合、こういう考え方の誤り、プログラムの誤記を起こすケースがあるというサンプル。
・問題の原因の調査手順、デバッグの方法。
・一般的な解決法。
などが「知識」として残るQ&Aになるよう、配慮願います。
    • good
    • 0

1) 「.」の入った箱を用意する。



..........
..........
..........
..........

2) 箱の左上から順に円周上の点かどうか判断する。

3) 円周上の点なら、「.」→「X」に置き換える。

とか。

この回答への補足

解答ありがとうございます。一つ質問があります。

>2) 箱の左上から順に円周上の点かどうか判断する。

とありますが、それはどういう風に判断する事ができますか?私の考えでは極座標(x=rcosθ, y=rsinθ)を使うのかなぁと思うのですが、違いますか?

補足日時:2005/02/25 03:37
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!