![]() |
1
4
在Ashelley提到的网页上,针对两个物体匀速运动的情况,提出了最接近点法。然而,我相信同样的向量演算方法可以用来推导两个物体以恒定的非零加速度(二次时间依赖性)运动的结果。 在这种情况下,距离平方函数的时间导数是3阶(立方)而不是1阶。因此,最近接近的时间有3种解决方案,这并不奇怪,因为两个物体的路径都是弯曲的,所以可能有多个交叉点。对于此应用程序,您可能希望使用T的最早值,该值在当前模拟步骤定义的间隔内(如果存在这样的时间)。 我算出了导数方程,它应该给出最接近的次数:
在哪里?
和
(注意量级的平方
为了解决这个问题 T ,您可能需要使用类似的公式 found on Wikipedia .
当然,这只会给你
最近进近
.此时您需要测试距离(使用公式2)。如果大于
编辑 :由于高阶,方程的一些解实际上是 最远间隔 . 我相信在所有情况下,3种溶液中的1种或3种溶液中的2种都是最远分离的时间。您可以通过对时间的二阶导数(通过将一阶导数设置为零得到的t值)进行评估,以分析方式测试您是处于最小值还是最大值:
如果二阶导数的计算结果是正数,那么在给定的时间t内,距离是最小的,而不是最大的。 |
![]() |
2
2
在每个球体的开始位置和结束位置之间画一条线。如果得到的直线段与球体相交,那么球体肯定会在某个点上发生碰撞,并且可以通过一些巧妙的数学方法找到碰撞发生的时间。还要确保检查段之间的最小距离(如果它们不相交)是否始终小于2*半径。这也表明发生了碰撞。 从那里你可以倒退三角洲时间,使之恰好在碰撞时发生,这样你就可以正确地计算力了。 你有没有考虑过使用一个已经起作用的物理图书馆?许多库使用更高级、更稳定(更好的积分器)的系统来求解您正在使用的方程组。 Bullet Physics 浮现在脑海中。 |
![]() |
3
1
似乎你想要 Closest Point of Approach (CPA) . 如果它小于半径之和,就会发生碰撞。链接中有示例代码。您可以用当前速度计算每个帧,并检查CPA时间是否小于您的刻度线大小。您甚至可以缓存CPA时间,并且仅当加速应用于任一项时才进行更新。 |
![]() |
4
1
OP要求碰撞时间。一个稍微不同的方法将精确计算它… 记住位置投影方程是:
如果我们替换
这是物体之间矢量距离的公式。为了得到它们之间的平方标量距离,我们可以取这个方程的平方,在展开后如下所示:
为了找出碰撞发生的时间,我们可以将方程设置为半径和的平方,并求解
现在,我们可以用 quartic formula . 四次公式将产生4个根,但我们只对 真实的 根。如果存在双实根,则两个对象在同一时间点接触边。如果有两个实根,则对象在根1和根2之间连续重叠(即根1是碰撞开始的时间,根2是碰撞停止的时间)。四个实根意味着对象在根对1、2和3、4之间连续碰撞两次。
在R中,我使用
对象
|
![]() |
shirshamay · 并非3D立方体显示的所有侧面 9 月前 |
![]() |
MirceaKitsune · 获取从一个点到最近长方体的距离 11 月前 |
![]() |
Hadi Ayoub · 如何使JavaFX3DBox透明 1 年前 |
![]() |
John Marston · 如何创建三个角度相等的三维矢量? 1 年前 |
![]() |
Krystal · 如何在三维绘图中绘制多维数组? 1 年前 |
![]() |
yldbear77 · 如何使用assimp获取纹理文件? 1 年前 |
![]() |
nona · Pyrender中的世界到像素转换 1 年前 |
|
Dronius · Three.js光线投射不适用于移动对象 1 年前 |