有效地检查矩形和圆扇区之间的碰撞

时间:2017-05-23 19:56:20

标签: python math vector pygame geometry

嘿,我想知道是否有人知道用于检查矩形和圆形扇区之间碰撞的代码,我知道该怎么做但我的方式是无效的,这是基本理论:

def is_inside_sector(rect, circle_center, radius, sector_point_A, sector_point_B):
#the rect is a tuple with the coordinate of the 4 corners
#the sector_point_A is the point on the edge of the sector and the circle
#the sector_point_B is the other one

    angle_A = sector_point_A.angle_to(vec(radius, 0)) % 360
    #calculate the angle of the first sector point

    angle_B = sector_point_B.angle_to(vec(radius, 0)) % 360
    #same for the second one

    for corner in rect:
        if circle_center.distance_to(corner) <= radius:
            if corner.angle_to(vec(radius, 0)) <= angle_A and corner.angle_to(vec(radius, 0)) >= angle_B:
                return True
        else:
            return False
        #this checks if any corner is in the sector, if yes, the rect and the sector collide
现在,我知道代码有很多缺陷,但我没有完成它。

有可能矩形和扇区碰撞而没有任何一个矩形角落在扇区内部,我会通过检查扇区的三个角(circle_center,sector_point_A,sector_point_B)是否位于扇区内来解决这个问题。 RECT。

简单的东西,这将是一个非常好的碰撞检查但是!你要检查7点!这是非常慢,你必须检查矩形的任何角落是否在扇区内,你必须检查扇区的任何角落是否在矩形内,它会给你100%的准确度,但它是如此之慢。

有什么方法可以检查扇区和矩形的碰撞而不会产生荒谬的功能?

非常感谢你帮我解决这个问题,如果你需要的话,我会按照我的解释,制作一个真正的功能测试7分,我写的那个是在旅途中制作的

1 个答案:

答案 0 :(得分:1)

大概你的意思是,按行的 S the Wikipedia definition: ⌔。 您需要三个功能:

  1. 扇区 S 中的给定点 p
  2. 两段是否相交?
  3. 段是否与圆弧相交?
  4. 如果没有这三种情况,我不知道如何覆盖所有情况。这三个都是 广泛探索,代码可以在网络上找到。

    <小时/> Sector