some changes
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
@@ -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);
|
||||
}
|
||||
|
13
src/main/java/org/solovyev/common/math/Normalizer.java
Normal file
13
src/main/java/org/solovyev/common/math/Normalizer.java
Normal 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);
|
||||
}
|
Reference in New Issue
Block a user