Math 球碰撞问题

Math 球碰撞问题,math,2d,collision,vector-graphics,Math,2d,Collision,Vector Graphics,所以我有一个碰撞球的系统,通常可以工作,除了当它们以相似的方向碰撞,相距不到90度 这是因为上面的球试图与黄线碰撞,黄线被认为是碰撞面,但它将球发送到错误的方向,并“跟随”另一个球。碰撞的一般算法为: dot = direction.surface; parallel = surface * dot; perpendicular = direction - parallel; direction = perpendicular - parallel; 它否定平行于曲面法线的方向的分量,该方向

所以我有一个碰撞球的系统,通常可以工作,除了当它们以相似的方向碰撞,相距不到90度

这是因为上面的球试图与黄线碰撞,黄线被认为是碰撞面,但它将球发送到错误的方向,并“跟随”另一个球。碰撞的一般算法为:

dot = direction.surface;
parallel = surface * dot;
perpendicular = direction - parallel;
direction = perpendicular - parallel;
它否定平行于曲面法线的方向的分量,该方向垂直于碰撞平面,而垂直于曲面法线的部分不变

有人知道这个问题的解决方法吗?我做错什么了吗

编辑:所以现在我添加了:

average = (ball1.velocity + ball2.velocity) / 2;
ball1.velocity -= average;
ball2.velocity -= average;
在进行上述计算之前和之后:

ball1.velocity += average;
ball2.velocity += average;

根据@Beta的回答,进入正确的参考框架。现在的问题是,球的速度无法保持,因为它们都有相同的速度和质量,但在碰撞后它们是不同的。我认为这不应该发生,或者是真的吗?

考虑一下从墙上弹起一个球的一维问题。简单

现在看我从飞行中的喷气式飞机的前舱壁上弹起一个球。球体以252米/秒的速度向北移动,舱壁以250米/秒的速度向北移动。答案并不明显。但换到我的坐标系中(通过从所有坐标中减去舱壁的速度,250米/秒),问题就变得微不足道了。解决它,然后将结果移回地面帧(向所有帧添加250 m/s),就完成了

现在,球以一定角度从墙上反弹的2D问题。简单。(但请验证您的代码是否正确执行此操作。)

现在两个球以相等和相反的动量碰撞(我现在假设它们有相同的质量)。你可以想象在碰撞面上有一堵黄色的墙,答案很简单


现在两个球相撞,但速度加起来不等于零。还有一堵黄色的墙,但它正在移动。好的,通过从所有物体中减去球的平均速度(总和/2)来转换到墙的框架中,解决一个简单的问题,然后通过将相同的速度加回到所有物体中来转换回来,就完成了。

这种方法用于动量中心框架。这就清楚了吗?还是我们应该多解释一下?你介意解释一下吗?网上有这么多使用这种方法的例子,但它并不总是有效?这是一个很长的解释。你熟悉改变参考系的想法吗?不。对不起,我是新手。但是现在我读了一点,我基本上需要改变坐标系的原点吗?等等。。。你是说另一个球应该与垂直于表面法线的向量碰撞吗?很好,谢谢。只有一个问题:如果两个球的速度相同,那么它们在碰撞后的速度也会相同,对吗?不一定。使用动量中心框架是一项伟大的技术,它使我们避免了许多神秘的代数。在你真正熟悉这项技术之前,不要尝试走更远的捷径。但我目前设置它的方式是,它有一个方向单位向量和一个速度变量,我只对方向向量执行碰撞物理。这就是为什么如果它们总是有相同的速度就好了,所以方向向量总是一个单位向量。。。