C++ 圆对撞机未检测到其中的点

C++ 圆对撞机未检测到其中的点,c++,geometry,C++,Geometry,在2D游戏中,我的功能是检测精灵是否位于圆圈边界内。但是,它没有做到这一点 下面的代码只是在构成圆轮廓的所有点之间循环(每个点都有一个x和y坐标)。然后,它将圆分成4个大小相等的象限(如笛卡尔平面),并检查精灵是否在该象限内(x/y坐标从窗口左上角的(0,0)开始,并随着向下移动y和向右移动x而增加): bool IsColliding() { for(int i=0;i

在2D游戏中,我的功能是检测精灵是否位于圆圈边界内。但是,它没有做到这一点

下面的代码只是在构成圆轮廓的所有点之间循环(每个点都有一个x和y坐标)。然后,它将圆分成4个大小相等的象限(如笛卡尔平面),并检查精灵是否在该象限内(x/y坐标从窗口左上角的(0,0)开始,并随着向下移动y和向右移动x而增加):

bool IsColliding()
{
for(int i=0;i


测试
(Px-Cx)²+(Py-Cy)²≤ R²既快又精确。

你在比较y坐标和x坐标。但这太复杂了。你应该应用毕达哥拉斯定理。正如@1201programalam所说,这段代码有点疯狂。要测试圆内或圆上的点,你只需测试
dx*dx+dy*dy
bool IsColliding()
{
for (int i = 0; i < TotalPointsThatMakeUpTheCircleOutline; i++)
{
    // Points lining the top left quadrant of circle
    if (Circle.Point[i].xCoordinate <= Circle.getCenterCoordinate().x &&
        Circle.Point[i].yCoordinate <= Circle.getCenterCoordinate().y)
    {
        // Checks if sprite is in-between circle outline point and center point
        if (sprite.xCoordinate >= Circle.Point[i].xCoordinate &&
            sprite.xCoordinate <= Circle.getCenterCoordinate().x &&
            sprite.yCoordinate >= Circle.Point[i].yCoordinate &&
            sprite.yCoordinate <= Circle.getCenterCoordinate().y)
        {
            return true;
        }
    }
    // Points lining the top right quadrant of circle
    ........
    // Points lining the bottom left quadrant of circle
    ........
    // Points lining the bottom right quadrant of circle
    ........

    return false;
}