看了好多份博客。。现在来这里详细讲一下。(附:博客1;博客2;)
求任意两点任意时刻的最近距离,实际上我们可以转化为枚举两个点,求这两个点的历史最近距离。
显然, 对于一个点,它的运动轨迹是k条折线,不妨先来看如何求出一个点的运动轨迹。见下图:
![](https://img-blog.csdn.net/20160303084520056?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
我们作出向量AB到达边界以后反弹得到的向量BA'。
首先考虑一直点A,和向量AB(即运动方向),如何得到点B的坐标,已知点A(px,py)和向量AB(vx,vy),假设圆心为(0,0)(否则将点A平移),设时间为λ,那么列出方程:
(px+λvx)^2+(py+λcy)^2=r^2,解出λ,那么B(px+λvx,py+λvy)。