0

tkinter を使用して、Python 3 で単純な 2D トップダウン ゲームを作成しています。すべての衝突可能なオブジェクトは、円/円弧または線のいずれかです。円が線に当たったことを検出するために、次のメソッドを作成しました。

式 y = mx + b および r^2 = (xh)^2 + (yk)^2 を使用しています

def CheckHitCToL(self, LX0, LY0, LX1, LY1, CX0, CX1, Tab):
    try:
        H = self.Creatures[Tab].X
        K = self.Creatures[Tab].Y
        R = abs((CX0 - CX1) / 2)
        M = (LY0 - LY1) / (LX0 - LX1)
        B = M * (-LX1) + LY1
        QA = (M * M) + 1
        QB = (-H - H) + (((B - K) * M) * 2)
        QC = (H * H) + ((B - K) * (B - K)) - (R * R)
        X = (- QB + sqrt((QB * QB) - (4 * QA * QC))) / (2 * QA)
        Y = (M * X) + B
        if ((X <= LX0 and X >= LX1) or (X >= LX0 and X <= LX1)) and ((Y <= LY0 and Y >= LY1) or (Y >= LY0 and Y <= LY1)):
            return True
        else:
            return False
    except:
        return False

私の問題は、垂直線がある場合です。M (または勾配) は (LY0 - LY1) / 0 です (これは、勾配が上昇/実行に等しく、垂直線には実行がなく、もちろん、これはエラーを返し、try except によってキャッチされ、衝突が発生していないことを移動メソッドに通知します。もちろん、「try:」を数行下に移動することもできますが、それでもエラーがスローされます。垂直線で作業するときにエラーをスローしないように、このプログラムをどのように適応させることができますか?

4

2 に答える 2