Cylinders
Chapter 13
Cylinders
intersection
ここも Cube のときと同様にあまり書くことがない。ただ、Cube では割とていねいに intersection の解説がされていたのに、こちらでは天下り式にやり方が書かれていて写経するだけになっていたため、その部分をここに残しておく。
Cylinder
円筒部分と Ray との交点を求める。Ray は
で、y 軸方向にのびる半径 1 の円筒は任意の y において
となる。よって
これを の二次方程式 と見れば、
としてあとは解の公式に当てはめるだけ。 の時には円筒と Ray が平行なので、交点なしとする
y 軸方向に無限に長い円筒ならこれで終わりだけれど、今回実装した Cylinder は minimum と maximum を設定でき、その場合には有限の長さを持つ。
とはいえ、単に y の有効範囲があるというだけ。つまり、上記の二次方程式を解いて得た を Ray の式に代入して を求める。
この が の範囲内にあれば Ray と円筒が交差する。
最後に cap 部分だけど、これもそんなに難しくはない。Ray の が になる場所での が半径 1 の円の中に収まっているかを見るだけ。
が になる場所を知るには Ray の 成分のみに注目すれば、
で求まる。ここでは のみだけれど、 についても同様。こうして求めた を Ray の式にあてはめればその時点での が求まるので、
で判定できる。
Cone
Cone もほとんど Cylinder と変わらない計算で求まるから、ここでは側面との交点計算についてのみ書いておく。Cylinder の場合、側面は円筒で に関係なく常に半径は 1 だった。Cone になるとそうではなくなり、半径は になる。そのため、
になり、
として二次方程式を解く。 のときは の一次方程式として
で ok。
結果