光束开始方向是矢量Dir(dir.x, dir.y)
给定行的普通单位N (n.x, n.y)
为
l = sqrt((y1 - y2)^2 + (x2 - x1)^2)
n.x = (y1 - y2) / l
n.y = (x2 - x1) / l
[
dot = dir.x * n.x + dir.y * n.y
//after reflection
newdir.x = dir.x - 2 * dot * n.x
newdir.y = dir.y - 2 * dot * n.y
如果您确实需要角度,请使用atan2
功能
angle = atan2(newdir.y, newdir.x)
但是在大多数情况下,反射/击中的东西可能使用矢量分量来解决,而无需直接使用角度