プロが教える店舗&オフィスのセキュリティ対策術

C++にて、塗りつぶされた円を描くプログラムを描くにはどうすればいいでしょう?

A 回答 (7件)

何に書くのか: 画面なのか、画像ファイルなのか、プリンタなのか


どんな形式で書くのか: 点を並べて円状のにするのか、文字を並べて円状にするのか、「円状の図形」という情報を書くのか
なにを使って書くのか: 全部自前で作るのか、画像用ライブラリを使うのか、別のソフトを自動操作して書かせるのか、OSの機能を使うのか、OSを使うのならそのOSは

と、手段や目的によって多くの方法があります。
もうすこし、やりたいことをまとめてください。
    • good
    • 0
この回答へのお礼

OS windowsXP
Visual studioを使用して
点を打つ感じで作った円を画像ファイルで出力する

という感じです

お礼日時:2010/10/22 22:28

C++の言語仕様にはご要望を実現する機能はありません。


実行環境と使用するコンパイラが分からないと答えようがありません。
    • good
    • 0

対象OS等や使用するAPIなどの具体的な情報があったほうが回答が付きやすいかと思います。



とりあえず対象をWindowsとして、Win32APIを直接叩いた場合…、と書こうかと思いましたが、長くなるので以下を参考にしてみてください。
http://www.geocities.jp/ky_webid/win32c/010.html
http://www.usamimi.info/~hellfather/win32api/API …
    • good
    • 0

失礼ですがあなたがどの程度Windowsの描画処理に対して理解しているのかがわからないと具体的な回答は難しいと思いますよ



デバイスコンテキスト、Windowsメッセージ処理、ウィンドウプロシージャ、グラフィックデバイスの選択
などどの程度理解されているのでしょう

WM_PAINTメッセージおいて描画処理をすることになります
その為には 円そのものを描くためのペンと内部を塗るために使うブラシが必要になります

ココまでの説明で理解不能なのであればWindowsの描画の仕組みを勉強しなおしたほうがいいかもしれません
    • good
    • 0

ブレゼンハムのアルゴリズムというのがあります。

これは2点を結ぶ線分を整数演算だけで描画するアルゴリズムです。

しかしながら、このアルゴリズムの考え方を利用すると整数演算だけで楕円が描画できます。円は楕円の特殊な場合ですから、結局ブレゼンハムのアルゴリズムを利用すれば整数演算だけで円の輪郭線が描画できます。あとは円の左右端の間を埋めれば塗りつぶしの円が描けるはずです。
    • good
    • 1

まだ細かい点をつめる必要がありますが。



基本の流れは次の通り
1) 絵を描くための「キャンバス」となるものを用意する。
よくあるのが、 1画素あたりのバイト数 * 幅 * 高さ 分のunsigned char型の配列を用意する、というもの。
自動変数で用意すると大きな画像用のものはスタックが足りず確保できないので、(問題が無ければ)staticで宣言するとか、malloc/newで動的に確保する。または、std::vectorなどを使う。
場合によっては、専用の構造体/クラスやその配列を使ったり、[高さ][幅]の二次元配列にしたりする。

2)絵を描く
色を付けたい画素の座標に対応する要素の値を、付けたい色のものにする。
ライブラリによっては、専用の描画関数が用意されていることがある。

3)ファイルに出力する。
一番単純なのが、配列の内容をそのまま出力するRAWデータと呼ばれるもの。別のプログラムで正しく読み込むには、画素数や色数等の情報が別途必要。
通常の「画像ファイル」と呼ばれるものには、これらの情報が含まれるので、読み取り側でそれを使って元の絵を復元している。どの情報をどのように記録するかは、各フォーマットによる。

または、画像入出力用ライブラリを利用する。


C++の基本だけでなんとかできそうなのは、PNM形式で出力するものでしょうか。
http://ja.wikipedia.org/wiki/PNM_%28%E7%94%BB%E5 …
    • good
    • 0
この回答へのお礼

1と3は大丈夫です。
2の、絵を描く部分での計算式?この質問で言う塗りつぶし円を描くためにはどう描けばいいかが分からないです。

お礼日時:2010/10/24 04:24

中心x0,y0、半径rの円を塗りつぶすには、いろいろと方法があると思います。


・ベタな方法
全座標(x,y)について、 (x-x0)*(x-x0)+(y-y0)*(y-y0) を計算、 <= r*r なら円の中なので色を付ける。
実際には、円に外接する正方形よりだけ確認すればよいで 、 x0-r<=x<=x0+r,y0-r<=y<=y0+rの範囲を調べる。

・y0-r<=y<=y0+r のyについて、dy = y - y0 とする。
dx=x-x0 とすると、r,dx,dyからなる直角三角形ができるので、値のわかっているr,dyからdxが求まる。
左右の座標がそれぞれ x0-dx,y と x0+dx,yになるので、その間に色を付ける。

・(塗りつぶさない)円をかくアルゴリズムをつかって、円を書く
→囲まれた領域を塗りつぶす方法(ペイントアルゴリズムと言われたりする)を使って、円の中を塗る。
    • good
    • 1

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

このQ&Aを見た人はこんなQ&Aも見ています