使用SFML在C 中的非轴对准圆和矩形之间的碰撞检测
Collision Detection Between Non Axis-Aligned Circle and Rectangle in C++ using SFML
我一直在使用C 和图形库SFML创建游戏。我想要一种布尔方法来检查SF :: CircleShape和SF :: Rectangleshape之间是否存在碰撞,因为这两个对象是参数。问题在于对象不是对齐的。我将如何创建方法?
我对该方法的尝试(但仅适用于轴对齐形状):
bool checkCollision(CircleShape circle, RectangleShape rectangle)
{
double circleDistanceX = abs(circle.getPosition().x - rectangle.getPosition().x);
double circleDistanceY = abs(circle.getPosition().y - rectangle.getPosition().y);
if (circleDistanceX > (rectangle.getSize().x/2 + circle.getRadius()))
{
return false;
}
if (circleDistanceY > (rectangle.getSize().y/2 + circle.getRadius()))
{
return false;
}
if (circleDistanceX <= (rectangle.getSize().x/2))
{
return true;
}
if (circleDistanceY <= (rectangle.getSize().y/2))
{
return true;
}
double cornerDistance_sq = pow((circleDistanceX - rectangle.getSize().x/2), 2) + pow((circleDistanceY - rectangle.getSize().y/2),2);
return (cornerDistance_sq <= pow((circle.getRadius()),2));
}
这应该是评论,但看来我的声誉太低了。如果我是您,我会检查SAT方法,因为它真的很酷,可以用于检查包括矩形和圆圈在内的任何形状之间的分离。这是一个带有工作源代码示例的教程:http://content.gpwiki.org/vb:tutorials:building_a_physics_engine:basic_intersection_detection
此网站也有一些非常酷的示例,涉及其工作原理:
http://www.metanetsoftware.com/technique/tutoriala.html
相关文章:
- 落砂模拟碰撞检测C++和SFML
- SFML 中的重力和碰撞检测
- 我的碰撞检测中的奇怪行为
- 如何为球形物体和三角形地形提供高效的碰撞检测和响应
- 圆形与方形碰撞检测以及需要响应C++ |OpenGL。我的问题就是这个"I need to keep the circle outside the square"
- 在Qt3D中进行碰撞检测的预期方法(或好方法)是什么?
- 在碰撞检测方面苦苦挣扎.如何正确检测碰撞?
- 三角形-三角形碰撞检测问题
- 不同类别之间的C SFML碰撞检测
- 使用D3DXVECTOR C 的碰撞检测,发生碰撞后该怎么办
- 当我发生碰撞检测时,矢量迭代器不兼容
- 如何使用灵活的碰撞库在两个点云或点云与机器人末端执行器模型之间进行碰撞检测
- 优化碰撞检测C
- 使用碰撞检测来增加SFML 2.4中的游戏分数的问题
- 使用OnComponentHit UE4 C++进行碰撞检测
- 体素世界中的碰撞检测
- 使用SFML在C 中的非轴对准圆和矩形之间的碰撞检测
- 四边形 OpenGL 之间的碰撞检测
- 追逐玩家的实体之间的碰撞检测
- 任意大小凸多边形之间的碰撞检测算法