2017-10-18 8 views
-2

Supposons que nous ayons un rectangle ou un carré et que nous connaissions les coordonnées x, y de ses coins (4 coins). Supposons également que nous ayons un point à l'intérieur de ce carré pour lequel nous connaissons ses coordonnées (x, y), sa vitesse (km/h), son cap (cap est mesuré en degrés directionnels, 0 pour le nord, 180 pour sud et ainsi de suite) et le point de temps il a ces attributs (temps de l'époque en secondes).Algorithme pour détecter quand et où un point quittera une zone rectangle

Comment peut-on calculer le point de temps (époque en secondes) dans lequel le point sortira du rectangle ainsi que les coordonnées (x, y) de la sortie?

+1

Les côtés du carré/rectangle sont-ils alignés avec les directions de la boussole? –

+0

Oui, ils sont alignés. –

+0

Bienvenue dans StackOverflow. Veuillez lire et suivre les consignes de publication dans la documentation d'aide. [sur le sujet] (http://stackoverflow.com/help/on-topic) et [comment demander] (http://stackoverflow.com/help/how-to-ask) s'appliquent ici. Le temps et le mouvement en coordonnées sphériques est un sujet bien documenté dans les manuels scolaires et en ligne. – Prune

Répondre

1

Vous devez trouver quel bord est coupé en premier. Faire des équations pour se déplacer le long des deux coordonnées et calculer la première fois de l'intersection. Notez que pour les coordonnées géographiques, vous aurez peut-être besoin de calculs plus complexes, car le "rectangle" défini par les coordonnées Lat/Lon est un trapèze très courbé à la surface de la Terre. Regardez le chapitre "Intersection de deux chemins donnés points de départ et roulements" sur this page pour obtenir le temps de trajet.

vx = V * Cos(heading + Pi/2) //for y-axis north=0 
vy = V * Sin(heading + Pi/2) 

x = x0 + vx * t 
y = y0 + vy * t 

//potential border positions  
if vx > 0 then 
    ex = x2 
else 
    ex = x1 

if vy > 0 then 
    ey = y2 
else 
    ey = y1 

//check for horizontal/vertical directions 
if vx = 0 then 
return cx = x0, cy = ey, ct = (ey - y0)/vy 

if vy = 0 then 
    return cx = ex, cy = y0, ct = (ex - x0)/vx 


//in general case find times of intersections with horizontal and vertical edge line 
    tx = (ex - x0)/vx 
    ty = (ey - y0)/vy 

//and get intersection for smaller parameter value 
if tx <= ty then 
    return cx = ex, cy = y0 + tx * vy, ct = tx 
else 
    return cx = x0 + ty * vx, cy = ey, ct = ty 
+0

Mettre votre algorithme à l'essai dans une surface plane et non sphérique (terre), avec x0 = 8.0, y0 = 2.0 (je suppose que ce sont les coordonnées du point), t = 1508327031 (secondes épcoh pour lesquelles le point a ces attributs), V = 5.0 km/h et cap = 90.0 (degrés directionnels), x1 = 0.0, x2 = 10.0, y1 = 0.0, y2 = 10.0 (Je suppose également que ces valeurs sont les min/max X/Coordonnées Y du rectangle) les résultats que je prends sont cx = 4.0, cy = 0.0 et ct = 0.89 qui sont faux. –

+0

@AlJenssen Avez-vous converti 90 degrés en radians? –

+0

Même si je le convertis en radians, les résultats sont incorrects. –