假设我有一个圆在矩形区域内弹跳。在某个时刻,这个圆将与矩形的一个表面碰撞并反射回来。我这样做的通常方法是让圆与边界重叠,然后反映速度矢量。圆实际上与边界重叠的事实通常不是问题,在低速时也不是很明显。在高速行驶时,很明显圆圈正在做一些不应该做的事情。
我想做的是以编程方式考虑反射,并将圆圈放置在正确的位置,然后再将其显示在屏幕上。这意味着我必须计算它到达当前位置和未来位置之间边界的点——而不是计算它的新位置,然后检查它是否到达边界。
这比通常的圆形/矩形碰撞问题稍微复杂一些。我对应该如何做有一个模糊的想法 - 基本上在当前位置和新位置之间创建一个边界矩形,这带来了它自己的一系列问题(因为矩形是根据圆的方向旋转的)速度)。但是,我认为这是一个常见问题,并且已经存在通用解决方案。
此类问题有通用的解决方案吗?也许我应该研究一些基本理论?
由于只有一个圆形和一个矩形,因此实际上非常简单。半径为一个圆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
同样对于y
。您必须为每个维度中的相反边界设置类似的(反射的)检查。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)