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