我在做一个小游戏,需要一些碰撞,于是我就想了一个算法:把圆边缘与曲线的碰撞转化为 圆心与地形的碰撞。
首先我的物体是圆形的,当然其他图形也可以用圆近似代替或分割。 地形曲面是任意的,我的程序是用函数表达的。
如图,圆下落时不能直接知道接触点的位置,因此我的算法主要是得到近似的触点。
如果把地形函数f(x)延斜率方向 延长r,得到一个新的函数g(x).g(x)与圆心的相交足以说明f(x)与圆边缘相交。根据f(x)与g(x)的对应法则也可得到触点位置。
- 设a,b是g(x)上的点,k=f '(x),r为圆的半径.
- a=x-k*r/sqrt(k*k+1);
- b=f(x)+r/sqrt(k*k+1); 应该说由参数方程确定的函数可以直接用a,b表示。但隐函数的显化太难了几乎不可能,反正我是不行。

如果是凹的
则在外面。而且OX的乘上一个系数i可以解决这些问题,而且可以优化效率。如,k变化不大时a为1&