5

私は正しいトリガーを理解しようとしています。以下を決定するための式/関数: 2 つの線分を表す 2 つの方向ベクトル (既に決定されている) 間の角度変化 (度単位) 。これは、SHAPE RECOGNITION (ユーザーが画面上に手書きしたもの) のコンテキストで使用されます。

だから基本的に、

a)ユーザーが円、楕円、長方形などの(大まかな)形状を描く場合、その形状を構成する線は、20ポイント(xyペア)に分解されます。

b) これらの LINE SEGMENTS ごとに DirectionVector があります。

c) したがって、LINE SEGMENT(x0,y0) の BEGINNING は、前の行の END ポイントになります (たとえば、長方形のような閉じた形状を形成するため)。

SO、私の質問は、コンテキスト(つまり、ポリゴンのタイプを決定する)を考えると、2つの方向ベクトル(xとyの2つの浮動小数点値として利用可能)間の角度変化をどのように見つけるのですか???

私は非常に多くの異なるトリックを見てきました。方程式と私はこれについて明確にしようとしています.

どうもありがとうございました!

4

4 に答える 4

8

(x1,y1) が最初の方向ベクトルで (x2,y2) が 2 番目の方向ベクトルである場合、以下が成り立ちます。

cos( アルファ ) = (x1 * x2 + y1 * y2) / ( sqrt(x1*x1 + y1*y1) * sqrt(x2*x2 + y2*y2) )

sqrt は平方根を意味します。

http://en.wikipedia.org/wiki/Dot_productを参照してください

特に「幾何学的表現」のセクション。

于 2010-11-28T00:16:55.790 に答える
3

あなたはatan2を試すことができます:

float angle = atan2(previousY-currentY, previousX-currentY);

また、以前の回答で述べたように、

2 つのバークター間の角度 = acos(first.dotProduct(second))

于 2010-11-28T02:02:57.443 に答える
0

私の理解が正しければ、2 つのベクトル間の内積を評価し、適切なarccoを使用してこれらのベクトル間の角度を取得できます。

于 2010-11-28T00:17:29.243 に答える