Suchen Sie die neuen Koordinaten anhand eines Startpunkts, einer Entfernung und eines Winkels

12

Okay, sag, ich habe eine Punktkoordinate.

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

Jetzt habe ich auch einen Abstand und einen Winkel.

var distance = 20;
var angle = 72;

Das Problem, das ich zu lösen versuche, ist, wenn ich 20 Punkte in Richtung des Winkels von der Startkoordinate fahren möchte, wie kann ich meine neuen Koordinaten finden?

Ich weiß, dass die Antwort Dinge wie Sinus / Cosinus beinhaltet, weil ich früher wusste, wie man das macht, aber seitdem habe ich die Formel vergessen. Kann jemand helfen?

dqhendricks
quelle
1
72 grad von was? Die X-Achse, die Y-Achse? Etwas anderes? Im Uhrzeigersinn, gegen den Uhrzeigersinn?
pdr
@pdr 90 Grad wäre eine Richtung nach Norden, 45 Grad wäre eine Richtung nach Nordosten usw.
Dqhendricks

Antworten:

5

SOHCAHTOA

Sinus = Gegenteil / Hypotenuse Cosinus = Angrenzend / Hypotenuse Tangens = Gegenüber / Angrenzend

In deinem Beispiel:

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

Das Problem ist, dass Sie vorsichtig sein müssen, in welchem ​​Quadranten Sie sich befinden. Dies funktioniert im oberen rechten Quadranten perfekt, in den anderen drei Quadranten jedoch nicht so gut.

Dave Nay
quelle
1
Dies funktioniert in allen Quadranten. Die vollständige Formel zum Drehen eines Vektors (X, Y) lautet X '= X * sin (Winkel) + Y * cos (Winkel) und Y' = X * sin (Winkel) + Y * -cos (Winkel). Dies vereinfacht das, was Sie oben haben, wenn Sie sich nur von der x-Achse (1,0) drehen.
Chewy Gumball
Hmmm ... an welche Transformation erinnere ich mich, die einen Fehler in Bezug auf die Quadranten hat?
Dave Nay
2
Beachten Sie, dass in Javascript Math.sinund dergleichen die Eingabe im Bogenmaß erfolgt. Sie müssen also Folgendes konvertieren:radians = (degrees * (Math.PI/180)
Brian
1
@ DaveNay Sie haben Probleme beim Ausführen der Arc-Funktionen. Sin (45 Grad) = Sin (135 Grad), daher gibt arcsin (sin (135 Grad)) 45 Grad zurück; Cos (45) = Cos (315) ...
mhoran_psprep
2

Nur um eine Javascript-Anpassung von Movable Type Scripts aufzunehmen

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
quelle