【Python】円同士(2D)・球同士(3D)の当たり判定の作り方

この記事では、円や球などの図形同士が重なっているかどうかを判定する当たり判定について解説します。

円同士や球同士の当たり判定の仕組みを理解し、サンプルコードを通じて実装方法を学ぶことができます。

目次から探す

当たり判定とは

当たり判定とは、ゲーム開発やシミュレーションなどのプログラムで、オブジェクト同士が接触しているかどうかを判定する処理のことです。

例えば、キャラクター同士の衝突判定や弾と敵キャラクターの当たり判定などがあります。

なぜ当たり判定が必要なのか

当たり判定は、ゲームやアプリケーションでリアルな挙動を再現するために欠かせない要素です。

キャラクター同士がぶつかったときに適切な反応を示すためには、当たり判定が正確で効率的に行われる必要があります。

当たり判定の種類

当たり判定にはさまざまな種類がありますが、ここでは円同士の当たり判定と球同士の当たり判定に焦点を当てて解説します。

円同士の当たり判定

円同士の当たり判定を行うためには、円の中心座標と半径を利用して判定を行います。

以下は、2つの円が重なっているかどうかを判定するPythonのサンプルコードです。

import math

def check_collision(circle1, circle2):
    distance = math.sqrt((circle1[0] - circle2[0])**2 + (circle1[1] - circle2[1])**2)
    if distance <= circle1[2] + circle2[2]:
        return True
    else:
        return False

# 円1: 中心座標(0, 0), 半径2
# 円2: 中心座標(3, 0), 半径2
circle1 = (0, 0, 2)
circle2 = (3, 0, 2)

if check_collision(circle1, circle2):
    print("円同士が重なっています")
else:
    print("円同士は重なっていません")

このサンプルコードでは、2つの円の中心座標と半径を元に、円同士の当たり判定を行っています。

球同士の当たり判定

球同士の当たり判定も円同士の場合と同様に、中心座標と半径を使用して判定を行います。

以下は、2つの球が重なっているかどうかを判定するPythonのサンプルコードです。

import math

def check_collision(sphere1, sphere2):
    distance = math.sqrt((sphere1[0] - sphere2[0])**2 + (sphere1[1] - sphere2[1])**2 + (sphere1[2] - sphere2[2])**2)
    if distance <= sphere1[3] + sphere2[3]:
        return True
    else:
        return False

# 球1: 中心座標(0, 0, 0), 半径2
# 球2: 中心座標(3, 0, 0), 半径2
sphere1 = (0, 0, 0, 2)
sphere2 = (3, 0, 0, 2)

if check_collision(sphere1, sphere2):
    print("球同士が重なっています")
else:
    print("球同士は重なっていません")

このサンプルコードでは、2つの球の中心座標と半径を元に、球同士の当たり判定を行っています。

目次から探す