D'accord, disons que j'ai une coordonnée de points.
var coordinate = { x: 10, y: 20 };
Maintenant, j'ai aussi une distance et un angle.
var distance = 20;
var angle = 72;
Le problème que j'essaie de résoudre est, si je veux parcourir 20 points dans la direction de l'angle de la coordonnée de départ, comment puis-je trouver ce que mes nouvelles coordonnées seront?
Je sais que la réponse implique des choses comme Sine/Cosine, car j'avais l'habitude de savoir comment faire cela, mais j'ai depuis oublié la formule. Quelqu'un peut-il aider?
Sohcahtoa
Sine = opposé/hypoténuse cosine = tangente adjacente/hypoténuse = opposée/adjacente
Dans votre exemple:
Sine(72) = Y/20 -> Y = Sine(72) * 20
Cosine(72) = X/20 -> X = Cosine(72) *20
Le problème est que vous devez faire attention avec quel quadrant vous êtes. Cela fonctionne parfaitement dans le quadrant supérieur droit, mais pas si agréable dans les trois autres quadrants.
Juste pour enregistrer une adaptation JavaScript à partir de Scripts de type mobiles
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; }