反転(3)

2010 / 09 / 03 by
Filed under: Coding の素 
Bookmark this on Delicious
[`livedoor` not found]
[`yahoo` not found]

何で今まで反転の学習をしてきたのかというと、私がやりたいことが反転によって可能になる、ということを知ったからなんでした。
やりたいことの一つは↓

forked from: 反転の「見える化」(シュタイナー・チェーン版) – wonderfl build flash online

ウチに来るような方々なら皆さんご承知の「シュタイナー・チェーン」。
大きさが異なる二つの円があり、小さい円(以下「小円」と呼称)が大きい円(以下「大円」と呼称)に内包されてるときに、小さい円と大きい円の空隙をさらに円で敷き詰める(以下「連珠」と呼称)ってヤツ。wonderfl で発表されたときは一世を風靡しましたよね。

あまりにもその形状が萌えなので、ネットとか本とかいろいろ調べていたんです。でもあんまり資料がなかったなぁ。

作者の 9re さんによる解説記事にあった wikipediaWolfram MathWorld を読んで、小円と大円が同心円の場合の計算方法は分かりました。
wikipedia では小円の半径と敷き詰める円の数を決める、そこから連珠の半径を計算、最後に大円の半径を決める計算方法が記されています。
Wolfram MathWorld では、小円の半径と敷き詰める円の数を決める、そこから大円の半径を計算、最後に連珠の半径を決める計算方法が示されています。
ビミョーな違いですね。

で、問題なのは小円と大円が同心円になっていない場合なんですよね。
9re さんの投稿コードを見て、どういう計算式が記述されているのかは分かりましたが、どういう理屈でそういう計算になるかが分からん。
9re さんの解説記事には反転を使う、と書いてありましたので、その反転について学んでいた次第。
で、反転の計算式に忠実なコード記述をしたのが、今回投稿したシュタイナー・チェーンです。

ところでこのコードは、反転を使って「点」を「点」に写す計算式ですが、反転を使って「図」を「図」に写す計算式ってどう書けばいいんでしょう?

9re さんのコードは反転の軸としての円(以下「反転円」と呼称)を単位円として計算していましたが、それを単位円じゃなくして、さらに反転の計算式に忠実なものに書き換えると、大円なり小円なり連珠の一つの円なり(以下「描画する円」と呼称)を反転する計算式は以下のように書けると思います。

px、py が描画する円の反転前の中心座標と反転円の中心座標との差分、radius が描画する円の反転前の半径、ix、iy が描画する円の反転後の中心座標、ir が描画する円の反転後の半径。RADIUS_SQUARE は反転円の半径の二乗です。


var dist:Number = px * px + py * py - radius * radius;
var ix:Number = RADIUS_SQUARE * px / dist;
var iy:Number = RADIUS_SQUARE * py / dist;
var ir:Number = RADIUS_SQUARE * radius / dist;

そして反転の計算式(点の場合)を今一度示すと以下のとおりです。反転円の中心座標を原点(0, 0)とした場合の計算式。


var dist:Number = px * px + py * py;
var ix:Number = RADIUS_SQUARE * px / dist;
var iy:Number = RADIUS_SQUARE * py / dist;

上の式(図の反転)と下の式(点の反転)との違いは dist の計算において、描画する円の半径の二乗のマイナスを記述していることと、描画する円の反転後の半径が、描画する円の反転後の座標の計算と同じ式でできるということ。

で、知りたいのは上の式のdist を求める際に radius * radius のマイナスが発生する理由。
px の二乗と py の二乗を足しているから三平方の定理が使われているのは理解できる。
『「反転円の中心座標」から「描画する円の反転前の中心座標」の距離(の二乗)』から『描画する円の反転前の半径(の二乗)』を引くという部分の数学的理由を、ご存じの方はご教授いただけると幸いです。

もう一つのやりたいことは、何でも双曲幾何なるものを理解しないとできないらしいので、さらなる学習モードに入ります。



Comments

Tell me what you're thinking...
and oh, if you want a pic to show with your comment, go get a gravatar!





WP-SpamFree by Pole Position Marketing