[英]Is this the correct method of using dot product to find the angle between two vectors? C++ SFML
因此,在另一个问题中,我被告知您可以使用点积的简化公式来找到两个向量之间的角度:
angle = atan2(mouseY, mouseX) - atan2(yPos, xPos); //xPos, yPos is position of player
除了,据我了解,它只是将点作为向量。 这就是将鼠标和播放器位置插入参数的原因。 但是,当我以360度半径在播放器上移动鼠标时,播放器的角度和因此的旋转角度是-0.3 ...到-1.4 ...之间的值?这不是正确的方法吗? 我应该不是将向量表示为X,Y位置而是其他吗?
我发现还有另一个公式似乎对我不起作用:
angle = atan2(mouseY - yPos, mouseX - xPos);
第一种方法是正确的,第二种是错误的。 函数atan2(x,y)
计算相对于x轴从(0,0)
到(x,y)
的向量的弧度角。 因此,正确的做法是计算向量相对于x轴的两个角度(以弧度为单位),然后将它们彼此相减以获得两个向量之间的角度。
函数atan2
的结果是半开间隔(-pi,pi]
的值,以度表示,对应于(-180°,180°)
。0°表示指向右的矢量(沿x轴),90°指向上方的矢量,180°指向左侧的矢量,-90°指向下方的矢量。
您可以通过以下公式将结果以弧度形式转换为角度
atan(x,y)*180/pi
因此,如果要将结果值转换为角度,只需将它们乘以180/pi
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.