Foros - Stratos

Programadores => General Programadores => Mensaje iniciado por: J_F_NASH en 31 de Agosto de 2004, 02:04:41 PM

Título: Problema Con Rotación (problemas Con Los Grados)
Publicado por: J_F_NASH en 31 de Agosto de 2004, 02:04:41 PM
 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.
Título: Problema Con Rotación (problemas Con Los Grados)
Publicado por: Juan Mellado en 02 de Septiembre de 2004, 06:18:08 PM
 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