/*
* GridAspectOperator.java
*
* Created on January 28, 2006, 2:43 PM
*
*/
package ika.geo.grid;
import ika.geo.*;
/**
* Extracts aspect angles from a grid. Aspect angles are in radians, counted
* from the horizontal x axis towards north (standard geometric coordinate
* system). Angles point upwards.
*
* @author jenny
*/
public class GridAspectOperator implements GridOperator {
/**
* Creates a new instance of GridAspectOperator
*/
public GridAspectOperator() {
}
public String getName() {
return "Grid Aspect";
}
public ika.geo.GeoGrid operate(ika.geo.GeoGrid geoGrid) {
if (geoGrid == null) {
throw new IllegalArgumentException();
}
final int newCols = geoGrid.getCols() - 2;
final int newRows = geoGrid.getRows() - 2;
final double cellSize = geoGrid.getCellSize();
GeoGrid newGrid = new GeoGrid(newCols, newRows, cellSize);
newGrid.setWest(geoGrid.getWest() + cellSize);
newGrid.setNorth(geoGrid.getNorth() - cellSize);
float[][] srcGrid = geoGrid.getGrid();
float[][] dstGrid = newGrid.getGrid();
final int srcRows = geoGrid.getRows();
final int srcCols = geoGrid.getCols();
for (int row = 1; row < srcRows - 1; row++) {
for (int col = 1; col < srcCols - 1; col++) {
final float w = srcGrid[row][col - 1];
final float e = srcGrid[row][col + 1];
final float s = srcGrid[row + 1][col];
final float n = srcGrid[row - 1][col];
final float aspect = (float) Math.atan2(n - s, e - w);
dstGrid[row - 1][col - 1] = aspect;
}
}
return newGrid;
}
}