He realizado la siguiente aplicación en Action Script:
Una especie de reloj con una aguja que marca los grados.
En un campo de texto podemos meter un número y al presionar ENTER la aguja buscará ese grado.
Los grados van de 0 a 180 por un lado y de 0 -180 por otro. No de 0 a 360 como a mi me gustaría.
Ejemplo:
Metiendole -90 la aguja se desplazará desde la dirección actual hasta el -90 que tenemos en la zona izquierda.
El problema que tengo:
Estando la aguja en -90 introducimos en el campo de texto -120.
El recorrido mas lógico es que la aguja baje hasta el -120 que tiene bien cerca. Pues bien, la aguja hace todo el recorrido inverso hasta llegar a l -120.
Este problema trato de resolverlo con bastantes operaciones del tipo:
if (grado_Actual_De_La_Aguja >=0 && grado_Actual_De_La_Aguja > (-90))
{
grado_Actual_de_la_Aguja +=1;
}
Pero esto es un verdadero engorro y un quebradero de cabeza que no termina por resultar.
¿Cual sería la mejor forma de resolver mi problema?
¿Debería tratar con los grados 0-360 en vez de números negativos?
S2.
Uhm...,
sin una imagen no acabo de orientarme del todo, pero si no te he entendido mal, creo que tienes un intervalo de -180 -> 0 -> 180, de forma que cuando llegas a 180 empiezas de nuevo en -180.
El camino más corto para ir de un grado A hasta un grado B es el que implica un giro menor o igual que 180 grados, ya que 180 es media circunferencia. Puedes verlo imaginando que A = B, y a continuación ir separando B de A, girando B en una dirección. El camino más corto hasta B, partiendo de A, estará siempre en la misma dirección en la que giras B. En el momento que hayas girado B media circunferencia (180 grados) el camino más corto se encontrará en la dirección contraria.
Podrías hacer, por ejemplo (habrá miles de formas de hacerlo):
1. Sí ABS(B-A) <= 180 entonces
INC = SIGNO(B-A)
sino
INC = -SIGNO(B-A)
2. Sumar INC a A hasta alcanzar B
La función SIGNO(x) devuelve 1 si x es positivo y -1 en caso contrario:
SIGNO(x) = Sí x > 0 entonces 1 si no -1
Lo que he pretendido es calcular la distancia entre A y B, y la dirección en la que se encuentra B respecto de A. Sí la distancia [ ABS(B-A) ] es menor o igual que 180 entonces se debe avanzar en la misma dirección que se encuentra B de A [ SIGNO(B-A) ]. Y si es mayor que 180 en la dirección contraria.
No lo he probado, sólo es una idea.
Espero te sirva.
Saludos