Es posible saber la dirección de un trayecto si tengo la Lat-Lon inicial y la final...
Por ejemplo si tengo PI=Punto Inicial; PF= Punto Final.
PI ----> PF
ó
PF <---- PI
o Quizás diagonal.
No se donde poner esto, así que lo pongo en programación general.
Sabiendo coordenadas inicial (x1, y1) y la coordenadas finales (x2, y2) podrias calcular el Vector Direccion
dx=x2-x1;
dy=y2 - y1;
teniendo el vector direccion dx:dy (ojo, no son coordenadas, es la direccion)
Puedes calcular el angulo
angle=atan2(dy, dx)
y si lo quieres en radianes
angled= atan2 (y,x) * 180 / PI;
Bueno, lo entiendo, aunque lo estaba haciendo alrevez :/, podríamos darme un ejemplo para graficar el angulo?
Supongo que sería algo así,
|
180 | 90
-------------
270 | 360
|
No te entiendo.... te refieres como una manecilla de reloj?
x1= 0;
y1 = 0;
angulo = 90
Distancia = 10
anguloRadianes = angulo * Pi / 180;
x2 = sin(anguloRadianes) * Distancia;
y2 = cos(anguloRadianes) * Distancia.
Linea(x1,y1, x2, y2)
A lo que me refiero es que necesito saber si la dirección de las 2 posiciones, es de izq a der, o der a izq, etc... Supongo que el angulo debería ser entre los 360°
Esta dirección es más que todo para poder mostrar una imagen de una fecha, y son 4 posibles imagenes, que son estás...
1. ---> "Izq-Der"
2. <--- "Der-Izq"
3. -
-
-> "Diagonal Izq-Der"
4. - "Diagonal Der-Izq"
-
<-
No estoy seguro, pero podrias hacer algo asi.
PI = (xi; yi)
PF = (xf; yf)
PFPI = PF - PI = (xf - xi; yf - xi).
Y a partir de los valores que te de:
Si (xf - xi) es positivo e (yf - xi) es positivo = 1º cuadrante.
Si (xf - xi) es negativo e (yf - xi) es positivo = 2º cuadrante.
Si (xf - xi) es negativo e (yf - xi) es negativo = 3º cuadrante.
Si (xf - xi) es positivo e (yf - xi) es negativo = 4º cuadrante.
Si alguno de los valores da 0, te toca calcular si esta a 0, 90, 180 o 270 grados.
Un saludo :)
Yo lo tenia así, pero no me funciona en algunos casos... :/
resLat = inicio[0] - fin[0];
resLon = inicio[1] - fin[1];
if( (resLat < 0) && ( resLon < 0) ){
return "--->";
}else if( (resLat > 0) && ( resLon < 0) ){
return "Diag-->";
}else if( (resLat < 0) && ( resLon > 0) ){
return "<--Diag";
}else if( (resLat > 0) && ( resLon > 0) ){
return "<---";
}
Esto...
resLat = inicio[0] - fin[0];
resLon = inicio[1] - fin[1];
No seria asi?
resLat = fin[0] - inicio[0];
resLon = fin[1] - inicio[1];
En que casos no te funciona?
Pues sí, pero en 90%, algunos puntos no concuerdan con la dirección correcta, tendré que investigar más :D
LOS AMÓ A TODOS! :-*
COÑO!, ahora necesito el calculo para la dirección de arriba-abajo y abajo-arriba
No estoy seguro de que funcione...
X = (xf - xi)
Y = (yf - xi)
(x = 0) y (y > 0) Vertical hacia arriba.
(x = 0) y (y < 0) Vertical hacia abajo.
(x > 0) y (y = 0) Horizonal hacia la derecha.
(x < 0) y (y = 0) Horizontal hacia la izquierda.
(x = 0) y (y = 0) Es un punto, no una fecha.
Un saludo :)