c++ - 使用分离轴定理的碰撞检测

标签 c++ algorithm 2d collision-detection

最近我一直致力于为我的游戏实现一个良好的碰撞检测系统。在将其应用到我的游戏中之前,我决定进行某种模拟。我遵循了许多教程(主要是 this one ),但我可以让它工作。我是一步一步跟着做的,但我不知道我的错误是在重叠部分(检查两个投影是否重叠)还是在整个代码本身。

该代码还具有 Vector2D 和 ConvexPolygon 实现。 这是代码:

http://pastebin.com/whV31SDi

因为比较长,所以粘贴到pastebin中。

最佳答案

你说的代码很长,我没有全部看完。但是出现了两个错误

1) 你的operator-是倒退的

    Vector2D& operator - (const Vector2D& other)
    {
            Vector2D resultant;
            resultant = Vector2D(other.x - this->x,other.y - this-> y);
            return resultant;
    }

应该是

    Vector2D& operator - (const Vector2D& other)
    {
            Vector2D resultant;
            resultant = Vector2D(this->x - other.x, this->y - other.y);
            return resultant;
    }

2) 您的代码存在很多样式问题。最大的一个是通过引用局部变量返回所有值。那只是自找麻烦,因为函数返回后变量不再存在。例如,这是编写 operator+ 的更好方法

   Vector2D operator+ (const Vector2D& other) const
   {
            return Vector2D(other.x + this->x, other.y + this->y);
   }

仍然不完美,因为像 operator+ 这样的对称运算符应该是全局函数而不是类成员,但比你拥有的要好。

关于c++ - 使用分离轴定理的碰撞检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12227153/

相关文章:

c++ - 在 iPhone 上使用现有的 C++ 引擎

c++ - 如何将字符串标记复制到 char */char 数组

algorithm - 根据各种标准选择一项的理论是什么?

java - 如何用Java创建平铺 map ?

Java从文件中读取二维数组,数字用逗号分隔

algorithm - 从预测算法中获取两个目标值

c++ - 升压信号连接管理

c++ - boost::signals2 的绑定(bind)类成员函数

c++ - 检测方法是否被覆盖

java - 计算复杂度为 O(1) 的 N 以下数字的倍数之和?