2点あります。基点とその他の点。反対側の他の点を持つために、ベースが移動する角度を取得する必要があります。しかし可能性は90度だけでなく0度から360度まで。
今は三角法で行う必要がありますが、その方法がよくわかりません。どのアルゴリズムを使用すればよいか説明してもらえますか? それともペースト溶液?ありがとう
2点あります。基点とその他の点。反対側の他の点を持つために、ベースが移動する角度を取得する必要があります。しかし可能性は90度だけでなく0度から360度まで。
今は三角法で行う必要がありますが、その方法がよくわかりません。どのアルゴリズムを使用すればよいか説明してもらえますか? それともペースト溶液?ありがとう
それらの点を使って直角三角形を描き、角度を見てください。点の座標が分かれば、トグルの側が分かっているので角度を求めることができます。
全体的に次のようになります。
double alpha = Math.atan((yb - yp) / (xb - xp));
どこ
xb、yb は基点の座標
xp、yp は赤い点の座標です
alpha
度ではなく、ラジアンになります。
からまでatan
の値を返すことに注意してください-pi/2
pi/2
これは確かに三角法の問題ですが、基本的に赤と黒の点の間の角度が必要で、その角度に 180 を追加するだけのように思えます。
ただし: Math.atan2(y, x)
角度(ラジアン単位)を取得するために、x座標の差とy座標の差を与えることができるので、ここで役立ちます。
ただし、基本的なことは 10 分ほどで学べるので、trig を調べる必要があります。「SOH CAH TOA」はあなたの一生のお役に立ちます。
角度は次のようにして取得できます。angle=Math.acos(unit-vector(a).unit-vector(b))ここで、aとbは基点と初期方向の間のベクトルであり、基点とそれぞれ他の点(「。」はドット積を表します)角度を度単位で指定する場合は、次のようにします:angle =(angle * 180 / Math.PI)。
ベクトルを理解しておらず、Javaを知っている場合は、次をお読みください。
次の情報が必要になります。
(ベクトルには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))を実行します。