Python Pygame-具有两个圆的碰撞检测

Python Pygame-具有两个圆的碰撞检测,python,pygame,collision,geometry,Python,Pygame,Collision,Geometry,我正在制作一个碰撞检测程序,其中我的光标是一个半径为20的圆,当它碰到另一个圆时,应该将一个值更改为TRUE。出于测试目的,我在屏幕中心有一个半径为50的固定圆。我可以测试光标圆是否碰到了静止的圆,但它不能正常工作,因为它实际上是在测试它是否碰到了一个正方形而不是一个圆。我的数学不是很好,我还没有找到这个问题的答案。我发现了如何测试光标是否接触到它,但从来没有两个具有两个不同半径的对象 如何检查两个圆之间的碰撞?谢谢 这是我的密码: #@PydevCodeAnalysisIgnore #@Und

我正在制作一个碰撞检测程序,其中我的光标是一个半径为20的圆,当它碰到另一个圆时,应该将一个值更改为TRUE。出于测试目的,我在屏幕中心有一个半径为50的固定圆。我可以测试光标圆是否碰到了静止的圆,但它不能正常工作,因为它实际上是在测试它是否碰到了一个正方形而不是一个圆。我的数学不是很好,我还没有找到这个问题的答案。我发现了如何测试光标是否接触到它,但从来没有两个具有两个不同半径的对象

如何检查两个圆之间的碰撞?谢谢

这是我的密码:

#@PydevCodeAnalysisIgnore
#@UndefinedVariable
import pygame as p, sys, random as r, math as m
from pygame.locals import *
from colour import *

p.init()

w,h=300,300
display = p.display.set_mode([w,h])
p.display.set_caption("Collision Test")
font = p.font.SysFont("calibri", 12)

x,y=150,150
radius=50
cursorRadius=20
count=0
hit=False

while(True):
    display.fill([0,0,0])
    mx,my=p.mouse.get_pos()
    for event in p.event.get():
        if(event.type==QUIT or (event.type==KEYDOWN and event.key==K_ESCAPE)):
            p.quit()

    ### MAIN TEST FOR COLLISION ###
    if(mx in range(x-radius,x+radius) and my in range(y-radius,y+radius)):
        hit=True
    else:
        hit=False

    p.draw.circle(display,colour("blue"),[x,y],radius,0)
    p.draw.circle(display,colour("white"),p.mouse.get_pos(),cursorRadius,0)

    xy=font.render(str(p.mouse.get_pos()),True,colour("white"))
    hitTxt=font.render(str(hit),True,colour("white"))
    display.blit(xy,[5,285])
    display.blit(hitTxt,[270,285])

    p.display.update()

只需检查两个中心之间的距离是否小于半径之和。想象两个圆几乎不接触(见下图),然后在两个中心之间画一条线。这条线的长度是两个半径的总和(如果你是拉丁语,也可以是半径)。因此,如果两个圆相交,它们中心之间的距离将小于半径之和,如果它们不相交,则将大于半径之和


我设法做到了!对于任何感兴趣的人:如果(m.sqrt((mx-x)**2+(my-y)**2)