開始点、距離、角度を使用して新しい座標を見つけます


12

さて、ポイント座標があります。

var coordinate = { x: 10, y: 20 };

今、距離と角度もあります。

var distance = 20;
var angle = 72;

私が解決しようとしている問題は、開始座標から角度の方向に20ポイントを移動したい場合、新しい座標がどうなるかを見つけることができますか?

私はこれを行う方法を知っていたので、答えはサイン/コサインのようなものを含むことを知っていますが、それ以来式を忘れました。誰でも助けることができますか?


1
何から72度?X軸、Y軸?他に何か?時計回り、反時計回り?
pdr

90度、45度等、北東の方向となり、北の方向であろう@pdrする
dqhendricks

回答:


5

ソハトア

正弦=反対側/斜辺余弦=隣接/斜辺接線=反対側/隣接

あなたの例では:

Sine(72) = Y/20 -> Y = Sine(72) * 20
Cosine(72) = X/20 -> X = Cosine(72) *20

問題は、現在の象限に注意する必要があることです。これは右上の象限では完全に機能しますが、他の3つの象限ではそれほどうまくいきません。


1
これはすべての象限で機能します。ベクトル(X、Y)を回転するための完全な式は、X '= X * sin(angle)+ Y * cos(angle)およびY' = X * sin(angle)+ Y * -cos(Angle)です。これは、x軸(1,0)から回転するだけの場合に上記のものを単純化します。
チューイーガムボール

うーん...象限に関する落とし穴があることを覚えていますか?
デイブネイ

2
注ことはJavaScriptでは、Math.sinあなたが変換する必要がありますので、などは、ラジアンで入力を取りますradians = (degrees * (Math.PI/180)
ブライアン・

1
@DaveNayでは、Arc関数を実行するときに問題が発生します。Sin(45degrees)= Sin(135degrees)したがって、arcsin(sin(135degrees))は45degreesを返します。Cos(45)= Cos(315)...
mhoran_psprep

2

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.sin1)*Math.cos(δ) + Math.cos1)*Math.sin(δ)*Math.cos(θ));

    var λ2 = λ1 + Math.atan2(Math.sin(θ)*Math.sin(δ)*Math.cos1), Math.cos(δ)-Math.sin1)*Math.sin2));

    λ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; }
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.