さて、私はポイント座標を持っていると言います。
var coordinate = { x: 10, y: 20 };
今、私は距離と角度も持っています。
var distance = 20;
var angle = 72;
私が解決しようとしている問題は、開始座標から角度の方向に20ポイント移動したい場合、新しい座標をどのようにして見つけることができるかです。
答えはサイン/コサインのようなものを含んでいることを知っています。以前はこれを行う方法を知っていたからですが、それ以来式を忘れてしまいました。誰か助けてもらえますか?
ソカトア
サイン=反対/斜辺コサイン=隣接/斜辺接線=反対/隣接
あなたの例では:
Sine(72) = Y/20 -> Y = Sine(72) * 20
Cosine(72) = X/20 -> X = Cosine(72) *20
問題は、現在の象限に注意する必要があることです。これは右上の象限では完全に機能しますが、他の3つの象限ではそれほどうまくいきません。
Movable Type Scripts からjavascriptの適応を記録するだけです。
function createCoord(coord, bearing, distance){
/** http://www.movable-type.co.uk/scripts/latlong.html
φ is latitude, λ is longitude,
θ is the bearing (clockwise from north),
δ is the angular distance d/R;
d being the distance travelled, R the earth’s radius*
**/
var
radius = 6371e3, //meters
δ = Number(distance) / radius, // angular distance in radians
θ = Number(bearing).toRad();
φ1 = coord[1].toRad(),
λ1 = coord[0].toRad();
var φ2 = Math.asin(Math.sin(φ1)*Math.cos(δ) + Math.cos(φ1)*Math.sin(δ)*Math.cos(θ));
var λ2 = λ1 + Math.atan2(Math.sin(θ)*Math.sin(δ)*Math.cos(φ1), Math.cos(δ)-Math.sin(φ1)*Math.sin(φ2));
λ2 = (λ2+3*Math.PI) % (2*Math.PI) - Math.PI; // normalise to -180..+180°
return [λ2.toDeg(), φ2.toDeg()]; //[lon, lat]
}
Number.prototype.toDeg = function() { return this * 180 / Math.PI; }
Number.prototype.toRad = function() { return this * Math.PI / 180; }