Trova le nuove coordinate usando un punto di partenza, una distanza e un angolo

12

Ok, dì che ho una coordinata punti.

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

Ora ho anche una distanza e un angolo.

var distance = 20;
var angle = 72;

Il problema che sto cercando di risolvere è, se voglio percorrere 20 punti nella direzione dell'angolo dalla coordinata di partenza, come posso trovare quali saranno le mie nuove coordinate?

So che la risposta riguarda cose come seno / coseno, perché sapevo come farlo, ma da allora ho dimenticato la formula. Qualcuno può aiutarti?

    
posta dqhendricks 14.12.2012 - 02:34
fonte

2 risposte

5

Sohcahtoa

Sine = Opposite / Hypotenuse Coseno = Adiacente / Hypotenuse Tangente = Opposto / Adiacente

Nel tuo esempio:

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

Il problema è che devi stare attento con il quadrante in cui ti trovi. Funziona perfettamente nel quadrante in alto a destra, ma non è così bello negli altri tre quadranti.

    
risposta data 14.12.2012 - 03:35
fonte
2

Solo per registrare un adattamento javascript da 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.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; }
    
risposta data 17.06.2015 - 16:31
fonte

Leggi altre domande sui tag