假设我有一个圆形在一个矩形区域内弹跳.在某些时候,这个圆圈将与矩形的一个表面碰撞并反射回来.我这样做的通常方法是让圆圈重叠该边界,然后反映速度矢量.圆实际上与边界重叠的事实通常不是问题,在低速时也不是很明显.在高速下,圆圈正在做一些不应该做的事情.
我想要做的是以编程方式将反射考虑在内并将圆放在它的正确位置,然后再将其显示在屏幕上.这意味着我必须计算它到达当前位置和它的未来位置之间的边界的点 - 而不是计算它的新位置然后检查它是否已经到达边界.
这比通常的圆/矩形碰撞问题稍微复杂一点.我有一个模糊的想法,我应该怎么做 - 基本上在当前位置和新位置之间创建一个边界矩形,这带来了它自己的一系列问题(因为矩形根据圆的方向旋转)速度).但是,我认为这是一个常见问题,而且已经存在一个共同的解决方案.
这种问题有一个共同的解决方案吗?也许我应该研究一些基本理论?
由于你只有一个圆形和一个矩形,它实际上非常简单.r在矩形的矩形内部反弹的半径圆w, h可以被视为与p圆的中心,矩形内的点相同(w-r), (h-r).
现在位置更新变得简单了.给定您的位置点x, y和每帧速度dx, dy,更新的位置是x+dx, y+dy- 除非您越过边界.如果你最终得到x+dx > W(出租W = w-r),那么你会做以下事情:
crossover = (x+dx) - W // this is how far "past" the edge your ball went
x = W - crossover // so you bring it back the same amount on the correct side
dx = -dx // and flip the velocity to the opposite direction
Run Code Online (Sandbox Code Playgroud)
同样的y.您必须为每个维度中的相对边界设置类似(反射)检查.
| 归档时间: |
|
| 查看次数: |
1220 次 |
| 最近记录: |