Python 3.x 如何找到坡度为1/0的圆和直线相交的点

Python 3.x 如何找到坡度为1/0的圆和直线相交的点,python-3.x,geometry,quadratic,Python 3.x,Geometry,Quadratic,我正在使用tkinter用Python3编写一个简单的2D自顶向下游戏。所有可碰撞对象都是圆/弧或线。我编写了以下方法来检测圆何时碰到直线: 我使用的是公式y=mx+b和r^2=(x-h)^2+(y-k)^2 def CheckHitCToL(self、LX0、LY0、LX1、LY1、CX0、CX1、Tab): 尝试: H=self.biods[Tab].X K=自我。生物[Tab].Y R=abs((CX0-CX1)/2) M=(LY0-LY1)/(LX0-LX1) B=M*(-LX1)+LY

我正在使用tkinter用Python3编写一个简单的2D自顶向下游戏。所有可碰撞对象都是圆/弧或线。我编写了以下方法来检测圆何时碰到直线:

我使用的是公式y=mx+b和r^2=(x-h)^2+(y-k)^2

def CheckHitCToL(self、LX0、LY0、LX1、LY1、CX0、CX1、Tab):
尝试:
H=self.biods[Tab].X
K=自我。生物[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=LX1)或(X>=LX0和X=LY0和Y好的,最明显的方法是使用if((LX0-LX1)==0)并分别处理这种情况。在这种情况下,你需要检查LX0和CX0之间的距离是否等于圆的半径。

你可以使用另一种形式的直线方程-

隐式
A*x+B*y+C=0

或参数
x=LX0+t*(LX1-LX0),y=LY0+t*(LY1-LY0)

适当修改计算结果

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