 ## Detecting a rectangular collision with a circle | |
[ 所属分类 开发（python） | 发布者 店小二05 | 时间 2018 | 作者 红领巾 ] 0人收藏点击收藏

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?

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

1.凡CodeSecTeam转载的文章,均出自其它媒体或其他官网介绍,目的在于传递更多的信息,并不代表本站赞同其观点和其真实性负责；
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性，不作出任何保证或承若；
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。 技术大类 | 开发（python） | 评论(0) | 阅读(80)