Macintoshが作る円の計算式
アンチエイリアスが当たり前になっている今ではモノクロの円を綺麗に描けても意味がないかもしれない。例えば、【画像編集ソフトが作る円の比較】では図1-1よりも図1-2の方が綺麗であるが、図1-2よりも図4の方が綺麗に見える。それに、図形が綺麗に見えても文字が汚く見えてしまっては仕方がない。結局、文字の部分はアンチエイリアスを使うだろうから、モノクロの円にこだわる必要はない。しかし、画像編集ソフトによって、あるいはWindowsかMacintoshかによってモノクロの円の見え方が異なることは面白い。少しこだわってみたい。
【画像編集ソフトが作る円の比較】のように、モノクロの円の見え方が異なるのは円を描くときのドットの位置が異なるからであることは分かったが、ドットの位置をどのように決めているかについては、googleで検索したが見つけることができなかった。仕方ないので、当てはまる計算式を自分で探してみることにした。
Windowsの方の円についてはまだ分からないが、Macintosh(OS9)の方の円については意外に早く見つかった。Excelを使って直径40pxの円に相当するグラフを作ったら次のようになった。
図1 Excelで作った直径40pxの円に相当するグラフ y(上)=dd-INT(dd/2+(SQRT((dd/2+0.5)^2-(x-dd/2)^2))) y(下)=INT(dd/2+(SQRT((dd/2+0.5)^2-(x-dd/2)^2))) dd=40(直径) |
ドットが離れている部分は上半分の方のドットについては下に伸ばして下半分の方のドットについては上に伸ばす。その結果得られた円はMacintoshが作る円とドットの配置が同じだった。
直径7px~52px(dd=7~52)にも図1の式を当てはめてプロットしてみたが、Macintoshが作る円と同じだった。
しかし、図1の式だけでは不十分で、多少ドットを足しているようである。例えば、直径39pxの円では下の図2の黒い部分のように追加される。
図2 Macintoshが作る直径39pxの円の拡大図 赤い部分は図1の計算式によるドット。 黒い部分は追加されたドット。 |
常にドットが追加されるわけではなく、下の図3のように直径40pxの円では図1の計算式から求められるドットだけである。
図3 Macintoshが作る直径40pxの円の拡大図 |
どのようなルールでドットを追加しているかについても興味があるが、円を描くときの基本的な座標を求める計算式が分かっただけで満足した。それに、円を描くときの線幅が1pxよりも太い場合についても考察する必要があるが、面倒なので省略する。Windowsが作る円についても計算式を探してみたいが、Windowsよりも綺麗な円を描くMacintoshの方が分かったので十分かもしれない。
最後に、Macintoshが作った直径7px~52pxの円を並べた図をご覧あれ。全てを確認してないがWindowsが作る円とは形が異なるのではないだろうか。ついでに、直径7px~40pxの円について図2や図3のような拡大図へのリンクも張っておく。
図4 Macintoshが作る直径7px~52pxの円 直径7px~40pxの円の拡大図へのリンク: 7px、 8px、 9px、 10px、 11px、 12px、 13px、 14px、 15px、 16px、 17px、 18px、 19px、 20px、 21px、 22px、 23px、 24px、 25px、 26px、 27px、 28px、 29px、 30px、 31px、 32px、 33px、 34px、 35px、 36px、 37px、 38px、 39px、 40px |
追記(2009/5/29):
円(正円、真円)は楕円の一部だから楕円の式を見つけなければいけないのではないかと思い、次の式を試したが、残念ながらMacintosh(OS9.2.2)が作る楕円とは異なっていた。
y(上)=bb-INT(bb/2+((bb+0.5)/(aa+0.5))*(SQRT((aa/2+0.5)^2-(x-aa/2)^2)))
y(下)=INT(bb/2+((bb+0.5)/(aa+0.5))*(SQRT((aa/2+0.5)^2-(x-aa/2)^2)))
(aaはx軸側直径,bbはy軸側直径,aa=bbの時に正円になる)
次の式も試したが、残念ながらMacintosh(OS9.2.2)が作る楕円とは異なっていた。
y(上)=bb-INT(bb/2+((bb/2+0.5)*SIN(ACOS((x-aa/2)/(aa/2+0.5)))))
y(下)=INT(bb/2+((bb/2+0.5)*SIN(ACOS((x-aa/2)/(aa/2+0.5)))))
(aaはx軸側直径,bbはy軸側直径,aa=bbの時に正円になる)
どちらも正円の場合はMacintosh(OS9.2.2)が作る円と同じだったが、楕円の場合は微妙に異なっていた。四捨五入など小数点以下の処理を工夫してみたが一致する式は見つけられなかった。Macintosh(OS9.2.2)の内部(QuickDraw?)では別の計算式を使って描画しているものと思われる。
参考のため、Macintosh(OS9.2.2)で作った楕円の一覧図(長径を40pxと39pxに固定し、短径を19pxから42pxに変化させた)へのリンクを張っておく。
コメント 0