
ドットレベルで図形を描画するソースを作成しているのですが、
アンチエイリアスの計算をどのようにしたらいいのかが分かりません。
どのような感じに修正したらいいでしょうか?
// 画面に円を敷き詰めるロジック 円内部は塗りつぶす為、画面全体を走査して描画する
// windowXXX : ウィンドウのサイズ
// size : 円の直径
int white = 0xffffff;
int black = 0xffffff;
for(int y=0; y<windowHeight; y++){
for(int x=0; x<windowWidth; x++){
int cirX = x % size;
int cirY = y % size;
int sizePow = size * size;
cirX = cirX * 2 - size;
cirY = cirY * 2 - size;
if((cirX*cirX+cirY*cirY) <= sizePow){
setPixel( x, y, white );
}else{
setPixel( x, y, black );
}
}
}
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
・オーバーサンプリングを使う
(windowWidth * n) * (windowHeight * n) の配列を用意して、座標もsizeもn倍にして、配列に「描画」
→ 1/nに縮小。このときに中間色を使う。単純にはn*nの画素の平均を取る。
あるいは、配列を使わず、 X,Yを各 +0,+1/n,+2/n,..., +(n-1)/n したn*n個の座標について円内になる数を数え、その割合に合せて色を決める。
整数ではなくなるので、double,float等の実数型を使う。
・ドットを座標を中心とした1x1の正方形と考える。
4角の座標は (x-0.5,y-0.5),(x-0.5,y+0.5),(x+0.5,y-0.5),(x+0.5,y+0.5)となる。
全て円の中なら100%、そうでないなら、正方形内のうち円内になる面積比で色を計算する。
まじめにやるなら、正方形と円の交点や弧の角度等から計算。
手を抜くなら、上のオーバーサンプリングみたいに円内になる割り合いでやってもそれなりに見える。
あと、最近では処理系が賢いので、最適化により同じになる可能性があるのですが。
sizePow はループ中で変化しません。
cirYはXのループ中では変化しません。cirYが変化しないのなら、cirY*cirYも変化しません。
こういうのは、ループの外に出した方がよいです。最適化を無効にしたとき等、無駄な計算になりますから。
int sizePow = size * size;
for(int y=0; y<windowHeight; y++){
int cirY = y % size;
cirY = cirY * 2 - size;
int cirYPow = cirY * cirY;
int size_cirYPow = sizePow - cirYPow;
for(int x=0; x<windowWidth; x++){
int cirX = x % size;
cirX = cirX * 2 - size;
if(cirX*cirX <= size_cirYPow){ /* cirYPowを右辺へ移項 */
また、for( int cirY=0 ; cirY < size ;cirY ++), for( int cirX=0 ; cirX < size ;cirX ++)で円1つだけ計算して、それをx =cirX+size, cirX+size * 2 ...... (yも同様) にコピーする、という方法もあります。
それと
> int white = 0xffffff;
> int black = 0xffffff;
同じ値になっていますが。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題です 課題1 (二分探索木とセット) 大きさ size の配列 array を考える。す 2 2023/01/10 21:08
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
- C言語・C++・C# leetcode 155 minstack 1 2022/05/07 16:43
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
- C言語・C++・C# 並列プログラミングのπ計算について 1 2022/07/16 22:30
- C言語・C++・C# アセンブラ指令 3 2023/06/17 14:47
- C言語・C++・C# C言語 3 2022/11/09 13:27
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
3のつく数と3の倍数を表示 C言語
-
ヒストグラム均等化処理プログラム
-
C言語プログラミング 漸化式に...
-
2次関数プログラムを描写する...
-
カードシャッフルのブログラム...
-
C++で表を作成したいのです ...
-
再帰処理をループ処理に変換
-
プログラミングに関して
-
C++ bmp 透過処理
-
c言語プログラミングについて f...
-
当たり判定の処理がわかりません。
-
C言語 5) 正の整数 n を入力(...
-
異なるn個の整数からr個の整数...
-
C#メール受信から件名、本文を...
-
C#で複重しない乱数
-
intとlongは同じ?
-
複数の共有メモリの作成
-
デバッグビルドとリリースビル...
-
2の補数を計算するプログラム
-
C言語で%を使わない余りの出し方
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
おすすめ情報