首页 文章

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

提问于
浏览
0

所以在另一个问题中我被告知你可以使用点积的简化公式来找到两个向量之间的角度:

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);

1 回答

  • 1

    第一种方法是正确的,第二种方法是错误的 . 函数 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 即可 .

相关问题