円柱と頂点のコリジョン

前回内積、外積を使って4面体と頂点のコリジョンを求めたので、
今回はだいぶ違う求め方を使った円柱と頂点のコリジョンです。
ネタを明かせばピタゴラスの定理を使ったコリジョン判定ってだけなんですけどね。

円柱を求める前に、ひとまず簡単な球の判定を

あまり深い意味は無いのですが、後で半径うんぬんの理解が早いかなと。

中心点O、半径rの球と頂点Qのコリジョン判定。
OQの長さがr以下なら当たり。
…以上。そりゃそうですね。

気を取り直して円柱の判定

円柱はOPを軸とした半径rの円柱とします。
又、OPの長さをLとします。

当たり判定をする頂点をQとします。
OP軸上に垂直に立ち頂点Qとを結ぶ線分の長さをqとします。
球の当たり判定と同じで、
qがrより短ければQは円筒内に要るということになります。
※意図的にこの時点では説明が不完全です。

OP軸に垂直に立ち頂点Qを結ぶ線分とOP軸の交点と頂点Pとの距離をl(スモールエル)、
OとQの距離をS1、PとQの距離をS2とします。

この時点で求まっていない長さはlとq。
まずはlの長さを求めます。

ピタゴラスの定理の説明は他に詳しいページがいくらでもあるので、省きます。
上図と見比べて何を示唆しているのか理解してください。

これでlが求まりました。
…が、lがマイナスになった場合はその時点でコリジョンは「ハズレ」です。
なぜならlがマイナスとは下図のような状態を示すからです。

図は省略しますが、同様にlがLより大きい場合もOP軸より前にQがはみ出しているため
コリジョンは「ハズレ」となります。

ここまでくれば後は簡単。

ここでq の平方根を取ってr と長さを比較する事もできますが、
お互いマイナスの値がありえない事と、計算量を考えると。
q の2乗と r の2乗を比較したほうが良いでしょう。