北京治疗白癜风的医院 https://mip.yyk.99.com.cn/fengtai/68389/这道题的地址,想尝试的小伙伴可以来试哦:
我们以原坐标系的点(R,R)作为新坐标系的原点(0,0)建立新坐标系,这样新坐标系中球心运动范围的长l和宽w都会相对于原先的L,W分别减小2R,如图所示:
b.现在我们在二维平面内的新坐标系下研究球心质点的运动。由于题目给出的角度a是任意的,球可能是向任意方向运动的,因此这里我们利用三角函数将球的运动分解为水平方向和竖直方向,可以看出在整个运动过程中球在水平和竖直方向上的运动速率(这里不指带有方向的速度,速度的方向可能在在碰撞后掉头)是恒定不变的。
c.速度分解后这个问题便可以转化为一维数轴上的边界碰撞问题。我们假设一个数轴上有一个质点在运动,它的运动范围是[0,10],假设初始坐标是3,现在它可能向左或者向右进行运动,我们在已知它的运动位移的情况下来求解它的最终位置:
这里为了方便处理,我们做一个转化,把它的初始位置3看做是在这次运动前,是已经从原点出发向右移动了3个单位。看成从原点出发的好处是,我们可以求出它相对于原点的总运动位移后直接加绝对值来将总位移直接全部转化为正值。(解释一下:如果质点从原点出发,那么它发生5的位移和发生-5的位移是没有区别的,因为如果一开始就从原点向左走,立马会反弹为向右走。)举个例子:假设质点从3开始发生-27的位移,也就相当于是从原点开始发生了(-27+3)=(-24)的位移,也就相当于从原点开始发生了24的总位移。
而数轴上质点的移动范围只有10,我们注意到如果质点发生10x2=20的位移,那么质点将会回到初始位置,因此在某个方向上边界范围的两倍实际上是一个运动周期,发生24的位移也就是发生4的位移。因此在这里例子里最终坐标为4。
所以我们只需要讨论在总位移中去除了若干个周期(本例子中的20)后的剩余位移。
若剩余的位移小于一个边界长度,例如这个例子中的边界长度为10,那么最终坐标就等于剩余位移大小;若剩余位移处于一个边界长度和两个边界长度之间,那么不难发现最终坐标就等于两个边界长度-剩余位移(例如从原点开始发生了17的位移,最终坐标为20-17=3)
综上所述:假设初始坐标为x,移动位移为s,边界长度为L,那么求解最终坐标的方法就是:先求出转化后的从原点出发的总位移Dx,Dx=fabs(x+s),之后若Dx大于2L则Dx-=2L直到Dx小于2L,最后若Dx小于L则Dx即最终坐标,若Dx介于2L和L之间,那么最终坐标为2L-Dx。
我们将这个方法推广到之前已经被分解过的二维平面运动中,即可分别求出x和y方向上的球心运动最终坐标(新坐标系中的),最后输出时再加上R即可转换回原坐标系中的坐标。
下面是代码:
若觉得文章对你有帮助,随手转发分享,也是我们继续更新的动力