| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
el diego Master


Registrado: 23 Ago 2002Mensajes: 232Ubicación: Paris
|
Publicado: Vie 30 Abr, 2004 3:48 pm Asunto: Como obtener el valor múltiplo de x... |
|
|
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 |
|
 |
LordNemesis Master


Registrado: 31 Dic 2003Mensajes: 340Ubicación: México
|
Publicado: Vie 30 Abr, 2004 4:33 pm Asunto: |
|
|
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 |
|
 |
el diego Master


Registrado: 23 Ago 2002Mensajes: 232Ubicación: Paris
|
Publicado: Vie 30 Abr, 2004 5:10 pm Asunto: |
|
|
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 |
|
 |
|