2012-03-09 8 views
-4

あなたの最初のオブジェクトがあなたの起源でアップベクトルがあると仮定して、あるオブジェクトと別のオブジェクトとの間の角度をどのように計算しますか?私はアンドロイドとjavaのこの問題を約6時間苦労していましたが、本当に良い質問や答えはありませんでした。あるオブジェクトと別のオブジェクトとの間の角度をどのように計算しますか?

質問がきれいでない場合: 私は画面上にオブジェクトを持っており、画面上の別のオブジェクトに対してy軸(または90度)上にこのオブジェクトからの角度が何であるかを知りたいと思います。したがって、最初のオブジェクトが1,1にあり、2番目のオブジェクトが2,2にある場合、角度は315でなければなりません。これは、0度が右にあり、90度が上(y軸)にあり、180度が左270度がダウンしています。

+0

数学スタック交換サイトを試してみることもできます。 – AHungerArtist

+0

[sigh]あなたは 'arctan'をしたいと思いますが、あなたの質問は非常に不明です。 – Beta

+0

これは話題にはなりません。しかし答えは[*ドットプロダクト*](http://en.wikipedia.org/wiki/Dot_product#Geometric_interpretation)です。 –

答えて

1

は、よりエレガントな解決策があるかもしれませんが、私はこれがうまく機能が見つかりました:

float angle = (float)Math.toDegrees(Math.atan2((double)(y1 - y2),(double)(x1 - x2))); 
angle = (angle + 180.0f) % 360.0f; 
angle = 360.0f - angle; 

これは、右から90、上から180、左から270の角度で始まります。私はこれを見つけるために1日以上かかるので、自分の質問に答えた、それはインターネット上ではなかった。私はそれが誰かを助けることを望む。誰かがより洗練された解決策を見つけるか、答えを表現する良い方法を見つけることができるかどうかを確認するために、質問を未回答のままで1〜2日間残しておきます。この回答はjavaで、Android上でテストされています。

0

答えは、このように、dot productを使用することである。

theta = arccos(a.b/(||a|| ||b||)) 

.は内積を表し、そして|| ||は、ベクトルの大きさを表します。

あなたのケースでは、あなたの2つのポイントの差になるようにaを選択して "上"(おそらく(0,0,1))とbを表します。

+0

あなたはどのようにこれをアンドロイドのJavaコードで表現しますか? – Lokiare

+0

@JamesHolloway:コード化されたソリューションを人々に完全に提供する習慣はありません。私はリンク先の記事を見てみることをお勧めします。あなたが特定の問題に当たったら、私に知らせてください。 –

+0

私はすでにそれを解決しましたが、時間がかかったので、他の人が正しい答えを出すのを助けて、2日間かけてそれを理解しようとする必要がないようにしたいと考えています。 – Lokiare

0

Javaでは、Math.atan2()という関数があります。これは「ベクトル」を取ります。一般的に2点あり、それらの間の角度を計算する必要があります。これは次のように行うことができます。

Point p1 = new Point(2,6); 
Point p2 = new Point(3,1); 
double angle = Math.atan2(p2.y-p1.y,p2.x-p1.x); 

Math.atan2は、ここで指定した形式で結果を返します:Math.atan2

+0

これは2Dです。 3Dについてはどうですか? –

+0

閉じるが、右に90度、左に180度、270度右に0度の正解が出てこない。これは逆の結果をもたらしますが、これは役に立ちません。また、-180から+180までの答え(度に換算した場合)を返します。 – Lokiare

+0

真。これは、上記のドキュメントで指定されているとおりに返します。結果が0未満の場合は、結果を360から引きます。それはあなたに必要なものを与えるはずです。 –

関連する問題