如何找到光束从直线的反射角
how to find the angle of reflection of the beam from the line
我有一行 (x1, y1) (x2, y2) 和一条角度为“a”的光线,我需要找到光线从这条线反射的角度,如下图所示。谢谢
光束起始方向为矢量 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
Dir的反射切向分量取反后,法向分量保持不变,所以我们可以用点积写出新方向的方程:
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)
但在大多数情况下 reflection/hitting 可以使用矢量分量解决问题而不直接使用角度
我有一行 (x1, y1) (x2, y2) 和一条角度为“a”的光线,我需要找到光线从这条线反射的角度,如下图所示。谢谢
光束起始方向为矢量 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
Dir的反射切向分量取反后,法向分量保持不变,所以我们可以用点积写出新方向的方程:
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)
但在大多数情况下 reflection/hitting 可以使用矢量分量解决问题而不直接使用角度