繁体   English   中英

这是使用点积查找两个向量之间的角度的正确方法吗? C ++ SFML

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM