Tengo un ceñidor unidimensional. su espacio es un punto flotante. También tengo un punto con coordenadas de coma flotante. Necesito encontrar su distancia al punto de cuadrícula más cercano.
Por ejemplo:Obteniendo el punto más cercano en la cuadrícula al punto
0.12
|
*
|---------|---------|---------|---------|---------|
0 0.1 0.2 0.3 0.4 0.5
El resultado sería -0.02
desde el punto más cercano está detrás de él.
Sin embargo si era
-0.66
|
*
|---------|---------|---------|---------|---------|
-1 -0.8 -0.6 -0.4 -0.2 0
El resultado será 0.06
. Como puedes ver está en coma flotante y puede ser negativo.
He intentado lo siguiente:
float spacing = ...;
float point = ...;
while(point >= spacing) point -= spacing;
while(point < 0) point += spacing;
if(std::abs(point - spacing) < point) point -= spacing;
Funciona, pero estoy seguro de que hay una manera sin bucles
¿El espaciado es lineal? – GWW
En sus ejemplos es lineal. – GWW
@MooingDuck: es lineal, simplemente no constante (su parámetro) – Dani