【发布时间】:2021-07-14 14:38:53
【问题描述】:
我想模拟一个盒子内粒子的碰撞。
更具体地说,我想创建一个函数(我们称之为collision!),在每次交互后更新粒子速度,如图所示。
我将粒子(半径等于 1)定义如下:
mutable struct Particle
pos :: Vector{Float64}
vel :: Vector{Float64}
end
p = Particle( rand(2) , rand(2) )
# example for the position
p.pos
> 2-element Vector{Float64}:
0.49339012018408135
0.11441734325871078
对于碰撞
function collision!(p1::Particle, p2::Particle)
# ... #
return nothing
end
主要思想是当两个粒子碰撞时,它们“交换”平行于粒子中心的速度矢量(矢量 n hat)。
为了做到这一点,需要将速度向量转换为碰撞法线(n hat)的正交基础。
然后交换平行分量,在原来的基础上旋转回来。
我认为我的数学是正确的,但我不确定如何在代码中实现它
【问题讨论】:
标签: julia linear-algebra collision particles