如何模拟粒子从 3D 曲面弹回?
How to model particle bouncing off of a curved surface in 3D?
我正在尝试模拟一个粒子从圆柱体(内部)或任何封闭的 3 维曲面的侧面反弹。
在与表面相互作用的那一刻,我有位置矢量、速度矢量和交点处与表面相切的平面,我正在寻找新的速度矢量。
目前正在 Python 中编码,但 pseudocode/general 算法也将非常有帮助。
获取飞机的normal vector
。 (为此,您可以在平面中的两个非平行向量之间进行叉积)。
取速度向量 components relative to the normal vector
和:
- 使平行分量为负
- 保持垂直分量不变。
采用类似于@jacdeh 的方法:
- 标准化法向量
- 将
velocity
与unit normal
进行内积(即相对于表面的标量速度)
- 将内积乘以
unit normal
(也就是我说的平行分量)。
- 从
velocity
中减去该分量的 2 倍,这就是结果。
将法向量计算为两个切向量与曲面的叉积
将其归一化以获得正常的单位
计算负速度与法向量的内积(点积)
将内积与单位法线相乘得到法线投影
从负速度减去法线上的投影
将其添加到投影以获得新的速度矢量
我正在尝试模拟一个粒子从圆柱体(内部)或任何封闭的 3 维曲面的侧面反弹。
在与表面相互作用的那一刻,我有位置矢量、速度矢量和交点处与表面相切的平面,我正在寻找新的速度矢量。
目前正在 Python 中编码,但 pseudocode/general 算法也将非常有帮助。
获取飞机的normal vector
。 (为此,您可以在平面中的两个非平行向量之间进行叉积)。
取速度向量 components relative to the normal vector
和:
- 使平行分量为负
- 保持垂直分量不变。
采用类似于@jacdeh 的方法:
- 标准化法向量
- 将
velocity
与unit normal
进行内积(即相对于表面的标量速度) - 将内积乘以
unit normal
(也就是我说的平行分量)。 - 从
velocity
中减去该分量的 2 倍,这就是结果。
将法向量计算为两个切向量与曲面的叉积
将其归一化以获得正常的单位
计算负速度与法向量的内积(点积)
将内积与单位法线相乘得到法线投影
从负速度减去法线上的投影
将其添加到投影以获得新的速度矢量