use*_*151 9 language-agnostic math physics collision-detection
我试图制作(基本上)一个简单的游泳池游戏,并希望能够预测一旦它击中另一个球后射击的位置.
我相信,第一部分是计算cueball是否会击中任何东西,如果是,它会碰撞到哪里.我可以计算出一条线和一个球的碰撞点,但不是2个球.
因此,考虑到2个球的x/y位置和速度,我如何计算它们碰撞的点?
(PS:我知道我可以通过计算沿途每一步的两个球之间的距离来做到这一点,但我希望有一些更优雅和最优的东西.)
设置示例:尝试计算红点
dmc*_*kee 14
有些事情需要注意:
r相撞时,它们的中心是2r分开的.alpha这个路径与从第一个球到第二个球的方向之间的角度.现在你有一些几何要做.
做这个结构:
A.B.AB.R从A运动方向构造射线.2r左右B.B垂直方向放下一段以R调用交叉点C.AB,你可以找到的角度alpha之间AB和R,用正弦定理发现的长度BC.D圆与RA更接近的点,并再次使用正弦定律来找到距离AD.BD现在你知道一切.
从中构建有效的代码留作练习.
BTW--如果两个球都在移动,这种结构将不起作用,但你可以变换成一个静止的框架,以那种方式解决,然后转换回来.请务必在反向转换后检查解决方案是否在允许的区域内 ...
/物理学家不能不这样做评论.我试图抵制.我真的做到了.
Dr.*_*ius 12
绘制@dmckee的答案
编辑
只是为了回应@ArtB死灵法师的回答,可以写出上图中D点的解决方案:
1/2 {(Ax+Bx+2 d Dx Cos[alpha]- Dx Cos[2 alpha]+ 2 Dy (Cos[alpha]-d) Sin[alpha]),
(Ay+By+2 d Dy Cos[alpha]- Dy Cos[2 alpha]- 2 Dx (Cos[alpha]-d) Sin[alpha])
}
Run Code Online (Sandbox Code Playgroud)
哪里
Dx = Ax - Bx
Dy = Ay - By
Run Code Online (Sandbox Code Playgroud)
和
d = Sqrt[4 r^2 - (Dx^2 + Dy^2) Sin[alpha]^2]/Sqrt[Dx^2 + Dy^2]
Run Code Online (Sandbox Code Playgroud)
HTH!