Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Como obtener el valor múltiplo de x...

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Como obtener el valor múltiplo de x... Responder citando

Hola, a alguien se le ocurre una manera eficaz de obtener el valor multiplo de x mas proximo?
ejemplo:
- X, que es el multiplo, es igual a 0.5
- Tengo un una variable N = 1.75.
- Si quiero desplazar N en uno u otro sentido, debo llegar a 1.5 o 2 que son los valores mas cercanos en ambas direcciones.

La verdad que no se me ocurre como hacerlo.

La aplicacion exacta es para hacer un especie de "Snap to grid" de un objto grafico.

saludos y gracias por adelantado.
diego
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Podrias utilizar esta funcion:
Código:

  bool EsMultiplo(int num,int mul)
  {
    return num%mul==0;   
  }


para que te diga si mul es multiplo de num entonces, se me ocurre que podrias hacer una busqueda en ambos sentidos del multiplo y cuando encuentres ambos, sacar la diferencia con respecto a X y el que sea menor, ese es el multiplo mas cercano, algo como esto...

Código:

MultiploMayor = x;
while(!EsMultiplo(x,++MultiploMayor));
MultiploMenor=x
while(!EsMultiplo(x,--MultiploMenor));

(MultiploMayor-x)<(x-MultiploMenor)?return MultiploMayor:return MultiploMenor;


Espero que te sirva de algo o por lo menos te de una idea de como hacerle.... Saludos...
_________________
Dirección Municipal de Informática
H. Ayuntamiento de Tijuana
Arriba Lopez Obrador !!!
Los Mexicanos Merecemos Respeto !!!
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor MSN Messenger
Mensaje    Asunto: Responder citando

Hola, gracias por la ayuda. Ya le encontré la mano. Lo muestro por si le es util a otra persona.

Código:

double PAS = 0.5  //La grilla es multiplo de 0.5
double x = 1.75;   //Esta es la posicion actual

double rigth = ( (int)(x/PAS) +1 ) * PAS;  //Aqui obtengo la posicion siguiente.
double left  = ( (int)(x/PAS) -1 ) * PAS;  //Restandole 1 obtengo la anterior posicion.


saludos
diego
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.