擅长:python、mysql、java
<p>不需要计算反射角,只需将问题分解为两个:一个用于<code>x</code>,另一个用于<code>y</code>。在这两种情况下,都需要粒子在超出边界时“返回”。在</p>
<p>我之前做过一个练习,研究流体中的粒子密度。最简单的方法是考虑两个方向上的(0,1)边界。下面的代码可以做到这一点(提示:正确使用<code>abs</code>将创建相当于反射的效果):</p>
<pre><code>x0 = [.1, .9]
delta = [-0.2, 0.3]
x1 = [(1-abs(abs(xi + di)-1)) for xi, di in zip(x0, delta)]
print(x1)
# 0.1, 0.8
#or using numpy:
x1 = 1-np.abs(np.abs(np.asarray(x0) + np.asarray(delta))-1)
print(x1)
>> [0.09999999999999998, 0.8]
array([0.1, 0.8])
</code></pre>
<p>我从你的问题中假设你忽略了粒子-粒子碰撞和粒子-粒子“非叠加”</p>