ここでは、点と三角形の当たり判定を、python3で行う方法を紹介します。
内容がとても難しく、理解しきれていないので残念ながら詳細の解説はできませんが、実装は簡単でとりあえずは動くと思いますので参考にしていただければ幸いです。
以下のコードでは、3点(A, B, および C)で構成される三角形 ABC と 点 T の当たり判定を行なっています。
また、コード中にも記述していますが、線上に 点 Tがある場合を当たりとするかどうかで、判定文の記述が異なりますのでご注意ください(イコールを入れるかどうかだけです)。
def collision_detection(a, b, c, t):
#各点のx, y座標をそれぞれ抽出
ax, ay = a[0], a[1]
bx, by = b[0], b[1]
cx, cy = c[0], c[1]
tx, ty = t[0], t[1]
#ベクトルを求める
ab = (bx - ax, by - ay)
bc = (cx - bx, cy - by)
ca = (ax - cx, ay - cy)
#外積のz軸成分を求める
abat_z = (bx - ax) * (ty - ay) - (by - ay) * (tx - ax)
bcbt_z = (cx - bx) * (ty - by) - (cy - by) * (tx - bx)
cact_z = (ax - cx) * (ty - cy) - (ay - cy) * (tx - cx)
#当たり判定
# ※接する場合も含む
if min(abat_z, bcbt_z, cact_z) >= 0 or max(abat_z, bcbt_z, cact_z) <= 0:
# ※接する場合を含まない場合はこちらを使用してください
#if min(abat_z, bcbt_z, cact_z) > 0 or max(abat_z, bcbt_z, cact_z) < 0:
print(True)
else:
print(False)
A = (0,0) #三角形を構成する点
B = (2,2) #三角形を構成する点
C = (4,0) #三角形を構成する点
T = (1,1) #当たり判定を行いたい点
collision_detection(A, B, C, T)
# --> True
お役に立てれば幸いです!