tai*_*jin 2 python math pygame trigonometry
我正在处理两个单位向量,但不确定如何计算。我需要它,以便如果它们指向同一方向,则答案为 1,相反方向的答案为 0,垂直(向上或向下)答案为 0.5,等等。
示例:对于两个向量 (1,0) 和 (-1,0)(因此,相反的向量),我得到的答案是 0。对于两个向量 (1,0) 和 (1/sqrt(2),1/ sqrt(2)) (因此,单位向量指向 45 度角)我得到 0.25。对于两个向量 (0,1) 和 (-1,0)(所以,垂直向量)我得到 0.5
感谢您对此的任何帮助!
阅读有关点积的信息一般而言,2 个向量的点积等于2 个向量之间的夹角的余弦乘以两个向量的幅度(长度)。
dot( A, B ) == | A | * | B | * cos( angle_A_B )
Run Code Online (Sandbox Code Playgroud)
因此,2 个单位向量的点积等于2 个向量之间夹角的余弦,因为单位向量的长度是 1。
uA = normalize( A )
uB = normalize( B )
cos( angle_A_B ) == dot( uA, uB )
Run Code Online (Sandbox Code Playgroud)
如果 2 个归一化向量指向同一个方向,则点积为 1,如果指向相反方向的点,则点积为 -1,如果向量垂直则点积为 0。
在 pygame 中,点积可以通过 计算math.Vector2.dot()。如果A和B是pygame.math.Vector2对象:
dot( A, B ) == | A | * | B | * cos( angle_A_B )
Run Code Online (Sandbox Code Playgroud)
在上面的例子中,AdotB范围是 [-1.0, 1.0]。AdotB * 0.5 + 0.5在范围[0.0,1.0]和math.acos(AdotB) / math.pi + 1角度映射之间A和B直线到范围[0.0,1.0]。
此外,pygame.math.Vector2.angle_to()计算给定向量的角度(以度为单位)。取决于角度的 [0.0, 2.0] 范围内的值可以通过以下方式计算
uA = normalize( A )
uB = normalize( B )
cos( angle_A_B ) == dot( uA, uB )
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
97 次 |
| 最近记录: |