BounceBall#04 ボールが四角に接触したことを検知する

前回までで四角を検出することとボールを動かすことができました。
次はボールが四角に接触するときを考えます。

ここでボールが四角に接触するとは、ボールと辺または角の最短距離がボールの半径以下であれば接触したと言えます。

そこで四角には4本の線分の内の1本について、線分ABとボールの中心点Cの最短距離dを考えます。この最短距離dがボールの半径以下であるかどうかを調べ、この試行を4本の線分に行えば、ボールと四角との当たり判定を行えます。

最短距離dについては三つのパターンがあります。

i)点Cから点Aの距離が最短距離dとなる場合

{
d = |C - A|
}
f:id:imoto-yuya-1234:20170704234757p:plain:w250

ii)点Cから点Bの距離が最短距離dとなる場合

{
d = |C - B|
}
f:id:imoto-yuya-1234:20170704234853p:plain:w250

iii)点Cから線分ABに対する垂線が最短距離dとなる場合

{
d = \frac{|(C - A) \times (B - A)|}{|(B - A)|}
}
f:id:imoto-yuya-1234:20170704234902p:plain:w220

導出は下記のサイトを参考にしました。
平面幾何におけるベクトル演算 » 直線と線分