some changes

This commit is contained in:
Sergey Solovyev
2011-09-20 18:20:39 +04:00
parent 759b0eb1ee
commit 1e36fc56aa
7 changed files with 164 additions and 31 deletions

View File

@@ -0,0 +1,59 @@
package org.solovyev.common.math;
import org.jetbrains.annotations.NotNull;
/**
* User: serso
* Date: 9/20/11
* Time: 5:42 PM
*/
public class DiscreteNormalizer implements Normalizer {
@NotNull
private final LinearNormalizer linearNormalizer;
private final double min;
private final double step;
public DiscreteNormalizer(double min, double max, int steps) {
assert min <= max;
assert steps > 1;
this.linearNormalizer = new LinearNormalizer(min, max);
this.step = linearNormalizer.normalize((max - min) / (steps - 1));
this.min = linearNormalizer.normalize(min);
}
public DiscreteNormalizer(double min, double max, double step) {
assert min <= max;
assert step > 0;
this.linearNormalizer = new LinearNormalizer(min, max);
this.step = linearNormalizer.normalize(step);
this.min = linearNormalizer.normalize(min);
}
@Override
public double normalize(double value) {
double normalizedValue = linearNormalizer.normalize(value);
double result = min;
while (true) {
if ( result + step > normalizedValue ) {
break;
} else {
result += step;
}
}
return result;
}
@Override
public double denormalize(double value) {
return linearNormalizer.denormalize(value);
}
}

View File

@@ -11,7 +11,7 @@ package org.solovyev.common.math;
* Date: 9/19/11
* Time: 9:31 PM
*/
public class LinearNormalizer {
public class LinearNormalizer implements Normalizer {
private final double min;
private final double max;
@@ -21,6 +21,7 @@ public class LinearNormalizer {
this.max = max;
}
@Override
public double normalize(double value){
if ((max - min) != 0d) {
return (value - min) / (max - min);
@@ -29,6 +30,7 @@ public class LinearNormalizer {
}
}
@Override
public double denormalize(double value){
return min + value * (max - min);
}

View File

@@ -0,0 +1,13 @@
package org.solovyev.common.math;
/**
* User: serso
* Date: 9/20/11
* Time: 5:30 PM
*/
public interface Normalizer {
double normalize(double value);
double denormalize(double value);
}