相对于坐标系的反射角



我有两个2D点u = (ux, uy)v = (vx, vy),它们定义了一条线段。另外,我有一个角度θ,它是相对于坐标系(x轴的角度)定义的,表明移动粒子的方向。是否有一种简单的方法来找到由粒子从线段反弹产生的反射角(同样,相对于坐标系)?

到目前为止,我已经找到了线段θuv = numpy.arctan2(vy-uy, vx-ux)的角度,取Δθ = θuv - θ的差值,并将结果角度设置为θ_reflected = θ - 2*Δθ。有时,这似乎工作,但其他时候它完全关闭。

段长度

leng = hypot(vy-uy, vx-ux)

和单位方向矢量(也许在numpy中有现成的函数,如normalized)

dx = (vx-ux) / leng
dy = (vy-uy) / leng

与线段垂直的单位

nx = - dy
ny = dx

粒子方向矢量为

px = cos(θ)
py = sin(θ)

反映向量

dott = dot(p, n) = px * nx + py * ny
rx = px - 2 * dott * nx
ry = py - 2 * dott * ny

如果你需要角度

θ_reflected = atan2(ry, rx)

但有时粒子方向矢量分量更有用

最新更新