检测与圆角的矩形碰撞 [英] Detecting Rectangle collision with a Circle

查看:75
本文介绍了检测与圆角的矩形碰撞的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个圆心为中心(Center_X,Center_Y),并且正在检测矩形是否落入其半径(Radius)。我将如何执行此任务?我试过使用

I have a Circle with a center point (Center_X, Center_Y) and I am detecting if a rectangle falls into it's Radius (Radius). How would I be able to perform this task? I have tried using

if (X - Center_X)^2 + (Y - Center_Y)^2 < Radius^2:
        print(1)

然后我尝试画一个圆以适合在该区域上:

Then I try to draw a circle to fit over this area:

Circle = pygame.draw.circle(Window, Blue, (Center_X, Center_Y), Radius, 0)

但它似乎没有排队。我在做错什么吗?

But it doesn't seem to line up. Is there something I am doing wrong?

推荐答案

这就是我在评论中所描述的内容,以及为正确处理案件所做的更改迈克尔·安德森(Michael Anderson)在评论中指出的一个较大矩形内的一个圆:

Here's what I was describing in my comments, plus changes to correct handling of the case of a circle inside a larger rectangle which Michael Anderson pointed out in a comment:

import math

def collision(rleft, rtop, width, height,   # rectangle definition
              center_x, center_y, radius):  # circle definition
    """ Detect collision between a rectangle and circle. """

    # complete boundbox of the rectangle
    rright, rbottom = rleft + width/2, rtop + height/2

    # bounding box of the circle
    cleft, ctop     = center_x-radius, center_y-radius
    cright, cbottom = center_x+radius, center_y+radius

    # trivial reject if bounding boxes do not intersect
    if rright < cleft or rleft > cright or rbottom < ctop or rtop > cbottom:
        return False  # no collision possible

    # check whether any point of rectangle is inside circle's radius
    for x in (rleft, rleft+width):
        for y in (rtop, rtop+height):
            # compare distance between circle's center point and each point of
            # the rectangle with the circle's radius
            if math.hypot(x-center_x, y-center_y) <= radius:
                return True  # collision detected

    # check if center of circle is inside rectangle
    if rleft <= center_x <= rright and rtop <= center_y <= rbottom:
        return True  # overlaid

    return False  # no collision detected

这篇关于检测与圆角的矩形碰撞的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆