圆碰撞后的新速度

2023-12-05

在圆形台球桌上,台球以速度 v1 与台球边界碰撞。该碰撞检测如下:

double s = sqrt( (p.x-a)*(p.x-a) + (p.y-b)*(p.y-b) );
if (s<r)        // point lies inside circle
                    // do nothing
else if (s==r)  // point lies on circle
                    // calculate new velocity
else if (s>r)   // point lies outside circle 
                    // move point back onto circle (I already have that part)
                    // calculate new velocity

现在怎样才能碰撞后的新速度 v2进行计算,使得入射角=反射角(弹性碰撞)?

PS:台球由点 p(x,y) 和速度向量 v(x,y) 表示。模拟是无摩擦.


假设您正在制作一些简单的(类似游戏的)台球模拟,您可以使用以下内容:

v_new = coeff*(v_old - 2*dot(v_old, boundary_normal)*boundary_normal);

Here v_old是你当前的速度矢量boundary_normal是圆形台球桌在撞击点的向内指向法线。如果你知道中心c你的圆桌和你有影响点p那么正常的就是normalize(c-p)。也就是说,减去时得到的归一化向量p from c.

现在我已经采取了coeff是介于 0(撞击后不再有速度)和 1(撞击后速度相同)之间的模糊因子。您可以通过确定正确的恢复系数来使这一点在物理上更加合理。

最后,上面的所有公式都很简单反射例如,正如您可能在基本光线追踪器中看到的那样。如前所述,这是对精确物理模拟的相当粗略的抽象,但很可能可以完成这项工作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

圆碰撞后的新速度 的相关文章

随机推荐