Sunday, March 18, 2012

プチコンでいろんな円を描いてみる

とあるMSXのプログラムに、小さい円〜大きい円をグラフィック画面に描き、それをスプライトに定義するものがありました。

移植しようとしてプチコンでGCIRCLEしてみると、MSXとは見た目と異なる円ができ、半径=0のときは何も描かれません。

半径0はまあよいとして、見た目が大幅に違うのはいまいち。興味もあり、自前で円を描いてみることにしました。

調べてみると、アルゴリズムが何個も。 今回確認したのは以下:
  1. プチコンのGCIRCLE
  2. 微分/SOFTIST:円、楕円の描画(アルゴリズム) (一番遅い)
  3. 三角関数(すべての角度について、x=x0+r*cos(a)、y=y0+r*sin(a))三角関数
  4. ブレゼンハム(Bresenham)の円描画/伝説のお茶の間 No007-09(1) 円の描画(1) MichenerとBresenham
  5. ミッチェナー(Michener)の円描画/Comparing Circle Drawing Algorithms
  6. ピタゴラスの定理(x^2+y^2=r^2)/Comparing Circle Drawing Algorithms
  7. ブレゼンハム 中点分岐を用いた円描画アルゴリズム/伝説のお茶の間 No007-09(1) 円の描画(1) MichenerとBresenham
  8. ピタゴラスの定理(値のより近いピクセルを選択する方式)/Comparing Circle Drawing Algorithms
  9. 直径の長さが正しくなる円描画/伝説のお茶の間 No007-10 円描画(2)
プチコンで実装してみた図。
横は左から半径0〜9。縦はアルゴリズム

MSXで円を描いてみる。
MSXのプログラム
MSXでの実行結果(FS-A1WX)

これだけやって、MSXとぴったりなのはなし。どうも8.(ビタゴラ2)が近いようなのでこれを採用。半径0は補正すればそっくりになるかも?
(プチコンのGCIRCLEとおなじものもなし。。3.(SIN/COS)の四捨五入版が近いかも)

どうしても自前で円を描画したい、という人はそういないとおもいますが、記録のためQRコード。



No comments:

Post a Comment