Java
2D

2点間の距離と角度と座標の求め方


2点間の距離と角度と座標の求め方

位置情報の座標の求め方はこっちを合わせて参照すれば緯度経度も出せるんじゃないでしょうか

一年の以上の時を経て変数渡しのミスがとれました!

デバイス・言語に限らずデフォルトのWidgetから自由になりたいとおもったら、

sin、cos、tanから逃げられないと25くらいで気がついて、

慌てて三角関数の本を買ったけど結局、読んでない無学なプログラマは僕だけはないと思う。

なぜ高校の授業中にこち亀を読んでしまったのかとか、

授業をすっぽかして、近所のファミブ(FamilyBookという大型レンタルビデオ・本・ゲーム等を扱う北関東とかにあるチェーン店)にいってしまったのかと嘆いてもしかたがない、親や先生の言う事は聞くべきですね。

ブログ等に昔メモったが、プログラミングで使うたびにQiitaに移していく。

Javaで記載しますので他言語は適時読み替えください。

Mathに当たるライブラリは一般的に商用でつかうような言語なら、まずありますので心配はいらないかと。

念のため直交座標ABの概念図を載せておきます。

Untitled (1).png


2点間の距離

理屈はいい公式がわかれば。

いやいや理屈は他の優秀なブログ等に譲る。


直交座標A(x,y)とB(x2,y2)の間の距離を求める関数


protected int getDistance(double x, double y, double x2, double y2) {
double distance = Math.sqrt((x2 - x) * (x2 - x) + (y2 - y) * (y2 - y));

return (int) distance;
}



2点間の角度


ABの角度を求める関数

protected double getRadian(double x, double y, double x2, double y2) {

double radian = Math.atan2(y2 - y,x2 - x);
return radian;
}
//radianをdegreeに変換
double degree = arcLineMargineRadian * 180d / Math.PI;


角度(θ)と距離が分かっている場合に座標Bを求める方法


θと距離から座標を求める処理

/*

θ(degree)にMath.PI / 180を掛けているのはdegreeをradianに変換している
radiusは半径である、距離とは半径を求めているのと同じ
*/
double radian = degree * Math.PI / 180;
y2 = Math.sin(radian) * radius;
x2 = Math.cos(radian) * radius;


番外


起点までの距離がわかっている座標Aから、特定の角度(alpha)へ等距離で回転した場合の座標Bを求める方法


起点の距離がわかっている座標A(x1,x2)から、特定の角度(alpha)へ回転した場合の座標B(x2,y2)を求める

x2 = x1 * Math.cos(alpha) - y1 * Math.sin(alpha)

y2 = x1 * Math.sin(alpha) + y1 * Math.cos(alpha)
【http://www.kodama-lab.com/seminar/javalang/ex02/rotate2.html】


最後に

たぶんあってる。間違っていたら編集リクエストくらはいm(__)m