Temukan koordinat baru menggunakan titik awal, jarak, dan sudut

12

Oke, katakan saya punya titik koordinat.

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

Sekarang saya juga memiliki jarak dan sudut.

var distance = 20;
var angle = 72;

Masalah yang saya coba selesaikan adalah, jika saya ingin melakukan perjalanan 20 poin ke arah sudut dari koordinat awal, bagaimana saya bisa menemukan seperti apa koordinat baru saya nantinya?

Saya tahu jawabannya melibatkan hal-hal seperti sinus / cosinus, karena saya dulu tahu bagaimana melakukan ini, tetapi sejak itu saya lupa rumusnya. Adakah yang bisa membantu?

dqhendricks
sumber
1
72 derajat dari apa? Sumbu X, sumbu Y? Sesuatu yang lain Searah jarum jam, berlawanan arah jarum jam?
pdr
@ pdr 90 derajat akan menjadi arah utara, 45 derajat akan menjadi arah timur laut, dll.
dqhendricks

Jawaban:

5

SOHCAHTOA

Sine = Berlawanan / Hypotenuse Cosine = Berdampingan / Hipotensi Tangent = Berseberangan / Berdampingan

Dalam contoh Anda:

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

Masalahnya adalah Anda harus berhati-hati dengan kuadran apa Anda berada. Ini berfungsi dengan baik di kuadran kanan atas, tetapi tidak begitu baik di tiga kuadran lainnya.

Dave Nay
sumber
1
Ini bekerja di semua kuadran. Rumus lengkap untuk memutar vektor (X, Y) adalah X '= X * sin (sudut) + Y * cos (sudut) dan Y' = X * sin (sudut) + Y * -cos (Sudut). Ini menyederhanakan apa yang Anda miliki di atas ketika hanya berputar dari sumbu x (1,0).
Chewy Gumball
Hmmm ... transformasi apa yang saya ingat yang memiliki gotcha mengenai kuadran?
Dave Nay
2
Perhatikan bahwa dalam javascript, Math.sindan sejenisnya mengambil input dalam radian, jadi Anda harus mengonversi:radians = (degrees * (Math.PI/180)
Brian
1
@ Jangan Pernah Anda mengalami masalah saat melakukan fungsi Arc. Dosa (45 derajat) = Dosa (135 derajat) karena itu arcsin (dosa (135 derajat)) akan mengembalikan 45 derajat; Cos (45) = Cos (315) ...
mhoran_psprep
2

Hanya untuk merekam adaptasi javascript dari Movable Type Scripts

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; }
Jonatas Walker
sumber