圓形與圓形碰撞
做遊戲的過程一定會碰到邊界碰撞的檢定,邊界較常見的就圓形和矩形,下面記錄一下,就先最簡單的圓形與圓形的碰撞,原理就是初中三年級的圓形幾何,當兩圓外切時連心線恰為兩半徑之和,當兩圓交於兩點時,兩半徑與連心線會形成三角形,故連心線 <= 半徑之和,則兩圓相交:
其實稱呼這個要求為疊合會更恰當,像是兩圓之位置關係為內離不能算是碰撞,因為邊界不相交,但是遊戲上多是從外部來靠近,即使邊界相交甚至到其一個物件全部落在另一個物件之中,碰撞已經發生了,所以不太去排除完全落在內部的情形,以下是 Java 程式碼:
public boolean isCircCircCollide(Circle circA, Circle circB) { double distance = Math.sqrt( // 計算連心線長 Math.pow(circA.X() - circB.X(), 2) // Circle.X() 得圓心x坐標 + Math.pow(circA.Y() - circB.Y(), 2) ); // Circle.Radius() 得半徑 return circA.Radius() + circB.Radius() >= distance; }
留言
張貼留言