deal with null positions in wind averaging and confidence handling

This commit is contained in:
Axel Uhl committed 2012-03-05 23:03:38 +01:00
1 parent 4039269568
commit a34348b090
2 files changed
+12 -5

No files matched your search

@@ -26,7 +26,13 @@ public class ScalablePosition implements ScalableValue<ScalablePosition, Positio
@Override
public ScalablePosition add(ScalableValue<ScalablePosition, Position> t) {
return new ScalablePosition(x+t.getValue().x, y+t.getValue().y, z+t.getValue().z);
ScalablePosition result;
if (t == null) {
result = this;
} else {
result = new ScalablePosition(x+t.getValue().x, y+t.getValue().y, z+t.getValue().z);
}
return result;
}
/**
@@ -19,7 +19,7 @@ public class ScalableWind implements ScalableValue<ScalableWind, Wind> {
private final ScalableSpeedWithBearing scalableSpeedWithBearing;
public ScalableWind(Wind wind) {
this.scalablePosition = new ScalablePosition(wind.getPosition());
this.scalablePosition = wind.getPosition() == null ? null : new ScalablePosition(wind.getPosition());
this.scaledTimePointSumInMilliseconds = wind.getTimePoint().asMillis();
this.scalableSpeedWithBearing = new ScalableSpeedWithBearing(wind);
}
@@ -34,19 +34,20 @@ public class ScalableWind implements ScalableValue<ScalableWind, Wind> {
@Override
public ScalableWind multiply(double factor) {
return new ScalableWind(scalablePosition.multiply(factor), factor*scaledTimePointSumInMilliseconds, scalableSpeedWithBearing.multiply(factor));
return new ScalableWind(scalablePosition == null ? null : scalablePosition.multiply(factor),
factor * scaledTimePointSumInMilliseconds, scalableSpeedWithBearing.multiply(factor));
}
@Override
public ScalableWind add(ScalableValue<ScalableWind, Wind> t) {
return new ScalableWind(scalablePosition.add(t.getValue().scalablePosition),
return new ScalableWind(scalablePosition == null ? t.getValue().scalablePosition : scalablePosition.add(t.getValue().scalablePosition),
scaledTimePointSumInMilliseconds+t.getValue().scaledTimePointSumInMilliseconds,
scalableSpeedWithBearing.add(t.getValue().scalableSpeedWithBearing));
}
@Override
public Wind divide(double divisor) {
return new WindImpl(scalablePosition.divide(divisor), new MillisecondsTimePoint(
return new WindImpl(scalablePosition == null ? null : scalablePosition.divide(divisor), new MillisecondsTimePoint(
(long) (scaledTimePointSumInMilliseconds / divisor)), scalableSpeedWithBearing.divide(divisor));
}