package mpi.fruitfly.math.datastructures; /** * <p>Title: PhaseCorrelation2D</p> * * <p>Description: </p> * * <p>Copyright: Copyright (c) 2007</p> * * <p>Company: </p> * * <p>License: GPL * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License 2 * as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * * @author Stephan Preibisch * @version 1.0 */ public class FloatArray2D extends FloatArray { public final int width; public final int height; public FloatArray2D(final int width, final int height) { super(new float[width * height]); this.width = width; this.height = height; } public FloatArray2D(final float[] data, final int width, final int height) { super(data); this.width = width; this.height = height; } public FloatArray2D clone() { FloatArray2D clone = new FloatArray2D(width, height); System.arraycopy(this.data, 0, clone.data, 0, this.data.length); return clone; } public final int getPos(final int x, final int y) { return x + width * y; } public final float get(final int x, final int y) { return data[getPos(x,y)]; } public final float getMirror(int x, int y) { if (x >= width) x = width - (x - width + 2); if (y >= height) y = height - (y - height + 2); if (x < 0) { int tmp = 0; int dir = 1; while (x < 0) { tmp += dir; if (tmp == width - 1 || tmp == 0) dir *= -1; x++; } x = tmp; } if (y < 0) { int tmp = 0; int dir = 1; while (y < 0) { tmp += dir; if (tmp == height - 1 || tmp == 0) dir *= -1; y++; } y = tmp; } return data[getPos(x,y)]; } public final float getZero(final int x, final int y) { if (x >= width) return 0; if (y >= height) return 0; if (x < 0) return 0; if (y < 0) return 0; return data[getPos(x,y)]; } public final void set(final float value, final int x, final int y) { data[getPos(x,y)] = value; } }