0

在 C# 中,我有以下代码:

Vector2.Dot(ref tmpDirection, ref direction, out result);

这会返回一个介于 -1 和 1 之间的浮点数。我很好奇如何在 Objective-C 中获得同样的功能。我知道你可以像这样计算两个向量的点积:

CGPoint point1 = CGPointMake(10, 10);
CGPoint point2 = CGPointMake(20, 20);
float dotProduct = point1.x * point2.x + point1.y + point2.y;

我不明白 C# 函数如何使结果介于 -1 和 1 之间,因为正常的点积数学可以产生任何数字。

4

2 回答 2

2

要从 [-1,1] 标准化,您需要做的就是除以幅度的乘积:

float mag1 = sqrt(point1.x*point1.x + point1.y*point1.y);
float mag2 = sqrt(point2.x*point2.x + point2.y*point2.y);
dotProduct = (dotProduct)/(mag1*mag2);
于 2012-07-13T19:43:46.050 回答
2

这仅适用于单位向量,来自文档

Vector2.Dot 方法:

计算两个向量的点积。如果这两个向量是单位向量,则点积会返回一个介于 -1 和 1 之间的浮点值,该值可用于确定两个向量之间夹角的某些属性。例如,它可以显示向量是否正交、平行,或者它们之间是否具有锐角或钝角。

如果你想模仿它,你需要使用点的大小的乘积来标准化点积。这是一组很好的功能来实现这样的事情。

于 2012-07-13T19:47:28.143 回答