gpt4 book ai didi

python - 将向量的差异转换为 0 和 1 之间

转载 作者:行者123 更新时间:2023-12-02 16:28:03 25 4
gpt4 key购买 nike

我正在处理两个单位向量,但不确定如何计算。我需要它,这样如果它们指向相同方向答案为 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

感谢您对此的任何帮助!

最佳答案

了解 Dot product一般来说,两个向量的积等于两个向量之间的夹角的余弦乘以两个向量的大小(长度)。

dot( A, B ) == | A | * | B | * cos( angle_A_B ) 

由此可见,2 个单位向量的 积等于这两个向量夹角的余弦,因为unit vector 的长度为 1。

uA = normalize( A )
uB = normalize( B )
cos( angle_A_B ) == dot( uA, uB )

A dot B

如果 2 个归一化向量指向相同方向,则点积为 1,如果指向相反方向,则点积为 -1,如果向量垂直,则点积为 0。

在pygame中,点积可以通过 math.Vector2.dot() 来计算.如果AB pygame.math.Vector2 对象:

uA = A.normalize()
uB = B.normalize()
AdotB = uA.dot(uB)

在上面的例子中,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] 范围内的值可以通过以下方式计算

w = 1 - A.angle_to(B) / 180

关于python - 将向量的差异转换为 0 和 1 之间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64017147/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com