SSブログ
RSS [RSS1.0] [RSS2.0]
共謀罪を含む改悪組織犯罪処罰法は
【「共謀罪」法 衆参両院議員の投票行動(東京新聞 2017/6/16)】

Macintoshが作る円の計算式

 アンチエイリアスが当たり前になっている今ではモノクロの円を綺麗に描けても意味がないかもしれない。例えば、【画像編集ソフトが作る円の比較】では図1-1よりも図1-2の方が綺麗であるが、図1-2よりも図4の方が綺麗に見える。それに、図形が綺麗に見えても文字が汚く見えてしまっては仕方がない。結局、文字の部分はアンチエイリアスを使うだろうから、モノクロの円にこだわる必要はない。しかし、画像編集ソフトによって、あるいはWindowsかMacintoshかによってモノクロの円の見え方が異なることは面白い。少しこだわってみたい。
 【画像編集ソフトが作る円の比較】のように、モノクロの円の見え方が異なるのは円を描くときのドットの位置が異なるからであることは分かったが、ドットの位置をどのように決めているかについては、googleで検索したが見つけることができなかった。仕方ないので、当てはまる計算式を自分で探してみることにした。
 Windowsの方の円についてはまだ分からないが、Macintosh(OS9)の方の円については意外に早く見つかった。Excelを使って直径40pxの円に相当するグラフを作ったら次のようになった。

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の黒い部分のように追加される。

Macintoshが作る直径39pxの円の拡大図
図2
Macintoshが作る直径39pxの円の拡大図
赤い部分は図1の計算式によるドット。
黒い部分は追加されたドット。

 常にドットが追加されるわけではなく、下の図3のように直径40pxの円では図1の計算式から求められるドットだけである。

Macintoshが作る直径40pxの円の拡大図
図3
Macintoshが作る直径40pxの円の拡大図

 どのようなルールでドットを追加しているかについても興味があるが、円を描くときの基本的な座標を求める計算式が分かっただけで満足した。それに、円を描くときの線幅が1pxよりも太い場合についても考察する必要があるが、面倒なので省略する。Windowsが作る円についても計算式を探してみたいが、Windowsよりも綺麗な円を描くMacintoshの方が分かったので十分かもしれない。

 最後に、Macintoshが作った直径7px~52pxの円を並べた図をご覧あれ。全てを確認してないがWindowsが作る円とは形が異なるのではないだろうか。ついでに、直径7px~40pxの円について図2や図3のような拡大図へのリンクも張っておく。

Macintoshが作る直径7px~52pxの円
図4
Macintoshが作る直径7px~52pxの円
直径7px~40pxの円の拡大図へのリンク:
7px8px9px10px11px12px13px14px15px16px17px18px19px20px21px22px23px24px25px26px27px28px29px30px31px32px33px34px35px36px37px38px39px40px

追記(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に変化させた)へのリンクを張っておく。


タグ:画像編集
nice!(0)  コメント(0)  トラックバック(0) 
カテゴリー:サイトを見て
共通テーマ:パソコン・インターネット

読者の反応

nice! 0

sonet-asin-area

コメント 0

コメントを書く 

お名前:[必須]
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。
captcha

トラックバック 0

トラックバックの受付は締め切りました