c++ - 碰撞后从方向取消表面轴

标签 c++ collision

假设我正在 (0.5,0.5) 移动到表面法线为 (-1,0) 的墙中。我希望最终结果是 (0,0.5),所以我不能继续移动到墙上而是沿着表面滑动。

我怎样才能做到这一点?我有

comp_u = n * (maths::dot(dir,n) / maths::dot(n,n));

它给出了垂直于碰撞表面的方向分量,其中“n”是垂直于碰撞表面的 vector ,我可以将其抵消。但是,如果我试图离开墙,它会抵消该组件,这意味着我永远无法离开墙。

最佳答案

只有当运动方向与法线方向相反时才应该执行操作...也就是说,dot(dir,n) 为负数。

如果结果是肯定的,您将离开墙并且您不会修改 dir

关于c++ - 碰撞后从方向取消表面轴,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12768678/

相关文章:

javascript - Canvas 弧线像素完美碰撞

objective-c - 适用于 iOS 的沙子物理学

javascript - 如何检测两个div是否正在接触/碰撞检测

C++ 为什么结构/类不会在 namespace 发生冲突时与变量和函数发生冲突?

c++ - unique_ptr 交换不起作用

c++ - 在 boost::asio::write 之后刷新 TCP

C++异常类设计

actionscript-3 - Adobe 动画碰撞

c++ - C++ rand() 中出现大的超出范围的数字

c++ - 如何为用预定义常量包围字符串的 cout 创建预处理器定义