2011年5月29日 戻る


アンチエイリアスがかかった円を高速描画するアルゴリズム

汎用的なアルゴリズムについての説明なんですが、サンプルコードをjavaで書いたのでここに置いておきます。 Xiaolin Wuという人が考えたらしい。

何の制約もなしに円を描くなら、実数型のかけ算・割り算・三角関数や平方根などを駆使すれば描けます。 しかし、PC用に普及しているintel系のCPUは整数型・足し算・引き算・論理演算などは高速で、実数型・かけ算・割り算・多くの初等関数は重いと言われていました。 最近はその重さが様々な技術で緩和されているようですが、どこまで使っていいのか突き詰めるのは簡単では無いですよね? ということで、ここでは昔からある「重い演算をできるだけ使わずに円を高速描画するアルゴリズム」を紹介します。

具体的にはは、前もって重い演算を使って色や座標決定ヒントのテーブルを作っておき、実際に円を書くときには足し算引き算だけで済ませることで高速化しています。 テーブルを使うということである程度のメモリを食うし最大半径に制限は付きます。 しかし、その制約内ならば高速に描けます。

環境

サンプルコードを確認した環境は以下の通りです。

OSWindowsXP home edition
jdkversion 1.6.0

このドキュメントを見るには

説明図にsvgを使っています。 svgを表示できるブラウザで見てください。 表示確認したブラウザは次の通り。

Google Chrome 11 はなぜかページ内のSVG画像の文字が小さくなってしまいます。 別のタブで画像だけ開けば本来の文字サイズで見れます。

IE9は環境の都合上未確認です。

  1. アルゴリズムの大雑把な説明
  2. サンプルコード
  3. このアルゴリズムの課題

広告 : Amazon.co.jpアソシエイト