0

C#では、次のコードがあります。

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

これは-1と1の間のfloatを返します。Objective-Cでこれと同じ機能を取得する方法に興味があります。私はあなたが次のように2つのベクトルの内積を計算できることを知っています:

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メソッド:

2つのベクトルの内積を計算します。2つのベクトルが単位ベクトルの場合、内積は-1から1までの浮動小数点値を返します。これを使用して、2つのベクトル間の角度のいくつかのプロパティを決定できます。たとえば、ベクトルが直交しているか、平行であるか、またはベクトル間に鋭角または鈍角があるかを示すことができます。

これをエミュレートする場合は、ポイントの大きさの積を使用して内積を正規化する必要があります。これは、そのようなことを実現するための優れた関数のセットです。

于 2012-07-13T19:47:28.143 に答える