/* * GeoTools - The Open Source Java GIS Toolkit * http://geotools.org * * (C) 2006-2008, Open Source Geospatial Foundation (OSGeo) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; * version 2.1 of the License. * * This library 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 * Lesser General Public License for more details. */ package org.geotools.referencing.operation.matrix; import java.awt.geom.AffineTransform; import org.junit.*; import static org.junit.Assert.*; /** * Tests {@link XAffineTransform} static methods. * * * @source $URL$ * @version $Id$ * @author Martin Desruisseaux */ public final class XAffineTransformTest { /** * Tolerance value for comparaisons. */ private static final double EPS = 1E-10; /** * Tests {@link XAffineTransform} in the unflipped case. */ @Test public void testUnflipped() { runTest(+1); } /** * Tests {@link XAffineTransform} in the flipped case. */ @Test public void testFlipped() { runTest(-1); } /** * Gets the flip state using standard {@code AffineTransform} API. */ private static int getFlipFromType(final AffineTransform tr) { return (tr.getType() & AffineTransform.TYPE_FLIP) != 0 ? -1 : +1; } /** * Run the test in the flipped or unflipped case. * * @param f -1 for the flipped case, or +1 for the unflipped case. */ private static void runTest(final int f) { // Test identity final AffineTransform tr = new AffineTransform(); tr.setToScale(1, f); assertEquals( 1, XAffineTransform.getScaleX0 (tr), EPS); assertEquals( 1, XAffineTransform.getScaleY0 (tr), EPS); assertEquals( 0, XAffineTransform.getRotation(tr), EPS); assertEquals( 1, XAffineTransform.getSwapXY (tr)); assertEquals( f, XAffineTransform.getFlip (tr)); assertEquals( f, getFlipFromType (tr)); // Tests rotation (< 45°) double r = Math.toRadians(25); tr.rotate(r); assertEquals( 1, XAffineTransform.getScaleX0 (tr), EPS); assertEquals( 1, XAffineTransform.getScaleY0 (tr), EPS); assertEquals( r, XAffineTransform.getRotation(tr), EPS); assertEquals( 1, XAffineTransform.getSwapXY (tr)); assertEquals( f, XAffineTransform.getFlip (tr)); assertEquals( f, getFlipFromType (tr)); // Tests more rotation (> 45°) r = Math.toRadians(65); tr.rotate(Math.toRadians(40)); assertEquals( 1, XAffineTransform.getScaleX0 (tr), EPS); assertEquals( 1, XAffineTransform.getScaleY0 (tr), EPS); assertEquals( r, XAffineTransform.getRotation(tr), EPS); assertEquals(-1, XAffineTransform.getSwapXY (tr)); assertEquals( f, XAffineTransform.getFlip (tr)); assertEquals( f, getFlipFromType (tr)); // Tests scale tr.setToScale(2, 3*f); assertEquals( 2, XAffineTransform.getScaleX0 (tr), EPS); assertEquals( 3, XAffineTransform.getScaleY0 (tr), EPS); assertEquals( 0, XAffineTransform.getRotation(tr), EPS); assertEquals( 1, XAffineTransform.getSwapXY (tr)); assertEquals( f, XAffineTransform.getFlip (tr)); assertEquals( f, getFlipFromType (tr)); // Tests rotation + scale tr.rotate(r); assertEquals( 2, XAffineTransform.getScaleX0 (tr), EPS); assertEquals( 3, XAffineTransform.getScaleY0 (tr), EPS); assertEquals( r, XAffineTransform.getRotation(tr), EPS); assertEquals(-1, XAffineTransform.getSwapXY (tr)); assertEquals( f, XAffineTransform.getFlip (tr)); assertEquals( 1, getFlipFromType(tr)); // Always unflipped according Java 1.5.0_09... // Tests axis swapping r = Math.toRadians(-90 * f); tr.setTransform(0, 1, f, 0, 0, 0); assertEquals( 1, XAffineTransform.getScaleX0 (tr), EPS); assertEquals( 1, XAffineTransform.getScaleY0 (tr), EPS); assertEquals( r, XAffineTransform.getRotation(tr), EPS); assertEquals(-1, XAffineTransform.getSwapXY (tr)); assertEquals(-f, XAffineTransform.getFlip (tr)); assertEquals(-f, getFlipFromType (tr)); // Tests axis swapping + scale tr.scale(2, 3); assertEquals( 3, XAffineTransform.getScaleX0 (tr), EPS); assertEquals( 2, XAffineTransform.getScaleY0 (tr), EPS); assertEquals( r, XAffineTransform.getRotation(tr), EPS); assertEquals(-1, XAffineTransform.getSwapXY (tr)); assertEquals(-f, XAffineTransform.getFlip (tr)); assertEquals(-f, getFlipFromType (tr)); } }