数值误差椭球-椭球碰撞

计算科学 线性代数 模拟 数值分析
2021-12-23 09:07:59

我正在尝试在我的 C++ 代码中实现椭球-椭球碰撞。简而言之,这个任务可以描述如下:假设我们在空间中有两个任意方向的椭圆,并且这个椭圆相交。这个椭圆最初位于坐标系的中心。我们需要找出我们需要将一个椭圆相对于另一个椭圆沿着连接它们的中心的线移动多远,直到不再相交。这是一个非常简单的数学任务。我使用下一个方程:

1)矩阵形式的椭球方程 2) 法线相等 其中是方向上的单位向量一个中心到另一个。我正在从这个系统中

xTA1x1=0
(xdn)TA2(xdn)1=0
A1x=λA2(xdn)
n
d

我在本文的最后一页找到了这个系统及其解决方案http://www.matthiasmueller.info/publications/orientatedparticles.pdf似乎一切都很好,这个算法在大多数情况下都很好,但是我注意到了,对于某些椭圆会发生错误(我的意思是该算法给出的结果不准确)。我还注意到,该错误主要发生在椭圆半径之间的比率大于 2 时。为了解决这个问题,我将代码中的所有变量从浮点数更改为双精度数,但它没有给出任何结果。似乎输入数据中的小错误会导致输出数据中的非常大的错误。有人知道我如何克服这种不稳定吗?

1个回答

实际上,您希望“向后运行”直到两个即将相交的椭圆刚好接触,以找到碰撞的时间和位置。

我不认为“非常简单的数学任务”是我描述在一般位置找到两个椭圆之间的距离的方式。David Eberly 在2D 椭圆之间的距离中的简明文章承诺了一种数值稳定的算法,他以在该领域的贡献而闻名。

圆和椭圆之间的最小距离问题比较容易,只涉及四次多项式的根。因此,当椭圆的主要半径和次要半径之间的比率较高时,您尝试的近似方法不太可靠,这似乎是合理的。

对于某些 3D 符号/机械,另请参阅 David Eberly 的从点到椭圆、椭圆体或超椭圆体的距离