package ika.geo.grid;
import ika.geo.GeoGrid;
/**
* A weighted and scaled combination of a grid with itself:
* out = in * w * scale + in * (1 - w)
* out = in * (w * scale + 1 - w)
* out = in * (w * (scale - 1) + 1)
* @author jenny
*/
public class WeightedScaleOperator extends ThreadedGridOperator {
private GeoGrid weightGrid;
private float scale;
public WeightedScaleOperator(GeoGrid weightGrid, float scale) {
this.weightGrid = weightGrid;
this.scale = scale;
}
@Override
public String getName() {
return "Scaled Combination";
}
@Override
public void operate(GeoGrid src, GeoGrid dst, int startRow, int endRow) {
final float scale_1 = scale - 1f;
final int nCols = src.getCols();
for (int row = startRow; row < endRow; ++row) {
float[] srcRow = src.getGrid()[row];
float[] wRow = weightGrid.getGrid()[row];
float[] dstRow = dst.getGrid()[row];
for (int col = 0; col < nCols; ++col) {
dstRow[col] = srcRow[col] * (wRow[col] * scale_1 + 1f);
}
}
}
}