2

2点あります。基点とその他の点。反対側の他の点を持つために、ベースが移動する角度を取得する必要があります。しかし可能性は90度だけでなく0度から360度まで。 ここに画像の説明を入力

今は三角法で行う必要がありますが、その方法がよくわかりません。どのアルゴリズムを使用すればよいか説明してもらえますか? それともペースト溶液?ありがとう

4

3 に答える 3

3

それらの点を使って直角三角形を描き、角度を見てください。点の座標が分かれば、トグルの側が分かっているので角度を求めることができます。

全体的に次のようになります。

double alpha = Math.atan((yb - yp) / (xb - xp));

どこ

xb、yb は基点の座標

xp、yp は赤い点の座標です

alpha度ではなく、ラジアンになります。

からまでatanの値を返すことに注意してください-pi/2pi/2

于 2013-01-30T14:27:39.747 に答える
2

これは確かに三角法の問題ですが、基本的に赤と黒の点の間の角度が必要で、その角度に 180 を追加するだけのように思えます。

ただし: Math.atan2(y, x)

角度(ラジアン単位)を取得するために、x座標の差とy座標の差を与えることができるので、ここで役立ちます。

ただし、基本的なことは 10 分ほどで学べるので、trig を調べる必要があります。「SOH CAH TOA」はあなたの一生のお役に立ちます。

于 2013-01-30T14:27:08.287 に答える
-1

角度は次のようにして取得できます。angle=Math.acos(unit-vector(a).unit-vector(b))ここで、aとbは基点と初期方向の間のベクトルであり、基点とそれぞれ他の点(「。」はドット積を表します)角度を度単位で指定する場合は、次のようにします:angle =(angle * 180 / Math.PI)。

ベクトルを理解しておらず、Javaを知っている場合は、次をお読みください。

次の情報が必要になります。

  1. Base-Pointの座標(xとyを持つポイントオブジェクトbasePointとして表されます)
  2. Other-Pointの座標。(otherPoint)
  3. Base-Pointが最初に指していた場所の座標。(initialPoint)

(ベクトルにはxとyの2つのコンポーネントがあります。xとyが2つあるベクトルのクラスを宣言するか、Pointを使用します)

newVector(Point p1, Point p2)
{
    // returns a new vector from point a 
    //to point b given two absolute co-ordinates a and b
    vector new1 = new vector(0, 0);
    new1.x = p2.x - p1.x;
    new1.y = p2.y - p1.y;
    return new1;

}

この図で、vector(a)が必要な場合は、newVector(basePoint、initialDirection);を実行します。

同様に、vector(b)= newVector(basePoint、otherPoint)

unitVector(vector a)
{
    vector new1 = new vector(0,0);
    new.x = a.x/(Math.sqrt(a.x*a.x + a.y*a.y));
    new.x = a.y/(Math.sqrt(a.x*a.x + a.y*a.y));
    return new1;
}

この図で、unit-vector(a)が必要な場合は、unitVector(vector(a))を実行します。

dotProduct(vector a, vector b)
{
    double val;
    val = a.x*b.x + a.y*b.y;
    return val;
}

この図で、unit-vector(a).unit-vector(b)が必要な場合は、dotProduct(unit-vector(a)、unit-vector(b))を実行します。

于 2013-01-30T15:21:51.063 に答える