Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Problema Con Rotación (problemas Con Los Grados)

Iniciado por J_F_NASH, 31 de Agosto de 2004, 02:04:41 PM

« anterior - próximo »

J_F_NASH

 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.

Juan Mellado

 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






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.