圓形與圓形碰撞

做遊戲的過程一定會碰到邊界碰撞的檢定,邊界較常見的就圓形和矩形,下面記錄一下,就先最簡單的圓形與圓形的碰撞,原理就是初中三年級的圓形幾何,當兩圓外切時連心線恰為兩半徑之和,當兩圓交於兩點時,兩半徑與連心線會形成三角形,故連心線 <= 半徑之和,則兩圓相交:





其實稱呼這個要求為疊合會更恰當,像是兩圓之位置關係為內離不能算是碰撞,因為邊界不相交,但是遊戲上多是從外部來靠近,即使邊界相交甚至到其一個物件全部落在另一個物件之中,碰撞已經發生了,所以不太去排除完全落在內部的情形,以下是 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;
  }

留言