レイとカプセルの貫通点その24でレイと球、そしてその25でレイと円柱との貫通点を計算する方法を見てきました。これらがあると本章のレイとカプセルとの貫通点を検討する事が出来ます。カプセルは円柱+半球×2カプセル(Capsule)は線分に一定の厚み(r)を付けた形状をしています。別の例えとして、線分の一方の端点P1を中心点とする半径rの球をもう一方の端点P2に向けてスライドさせた時の軌跡がその形状になります:図からも分かるように、カプセルは円柱の両端に半球がくっついた形をしています。このカプセルに向けてレイを飛ばした時の貫通点(衝突点)を求めるには、レイと球、そしてレイと円柱との衝突点が求められれば良いのですが、それらは既に前々章と前章で解説してきました。後はどこから貫通してどこへ抜けるのかを判断できれば良さそうです。貫通パターンレイがカプセルに当たって貫通するパターンは次の通りです:パターンは色々ありますが、要は貫通開始点及び終了点が球(半球面)なのかカプセル内の円柱部分なのかを判断できれば良い訳です。その判断をするための図をご覧ください:球P1、P2そして円柱部それぞれの貫通開始点Q1を求めたとします。球P1上にQ1があった場合、∠P2P1Q1が鈍角ならば貫通開始点が球面P1にある事が確定します。「鈍角=内積がマイナス」なので、ベクトルP1P2及びP1Q1の内積がマイナスか否かでその判断が出来ます。同じ事は球P2側でも言えます。球P1、P2いずれにも貫通開始点Q1が無かった場合、衝突があるとすれば無限円柱のどこかにQ1がある可能性が残ります。∠P2P1Q1と∠P1P2Qがいずれも鋭角(=内積がプラス)ならQ1はカプセルの円柱面にある事が確定します。それ以外だった場合、カプセルとレイは交差していません。ここまでと同じプロセスを貫通終了点Q2についても行います。Q1が存在していればQ2は必ず存在します。関数公開カプセルとレイとの貫通点を算出する関数を公開します。true;}中々の場合分けになってしまいますねぇ...(-_-;。単純に衝突判定するのではなくて衝突点を算出しようとしているので面倒くさい事になりました。