001 //$HeadURL: svn+ssh://rbezema@svn.wald.intevation.org/deegree/base/tags/2.1/src/org/deegree/model/csct/ct/MathTransform2D.java $
002 /*---------------- FILE HEADER ------------------------------------------
003
004 This file is part of deegree.
005 Copyright (C) 2001 by:
006 EXSE, Department of Geography, University of Bonn
007 http://www.giub.uni-bonn.de/exse/
008 lat/lon GmbH
009 http://www.lat-lon.de
010
011 It has been implemented within SEAGIS - An OpenSource implementation of OpenGIS specification
012 (C) 2001, Institut de Recherche pour le D�veloppement (http://sourceforge.net/projects/seagis/)
013 SEAGIS Contacts: Surveillance de l'Environnement Assist�e par Satellite
014 Institut de Recherche pour le D�veloppement / US-Espace
015 mailto:seasnet@teledetection.fr
016
017
018 This library is free software; you can redistribute it and/or
019 modify it under the terms of the GNU Lesser General Public
020 License as published by the Free Software Foundation; either
021 version 2.1 of the License, or (at your option) any later version.
022
023 This library is distributed in the hope that it will be useful,
024 but WITHOUT ANY WARRANTY; without even the implied warranty of
025 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
026 Lesser General Public License for more details.
027
028 You should have received a copy of the GNU Lesser General Public
029 License along with this library; if not, write to the Free Software
030 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
031
032 Contact:
033
034 Andreas Poth
035 lat/lon GmbH
036 Aennchenstr. 19
037 53115 Bonn
038 Germany
039 E-Mail: poth@lat-lon.de
040
041 Klaus Greve
042 Department of Geography
043 University of Bonn
044 Meckenheimer Allee 166
045 53115 Bonn
046 Germany
047 E-Mail: klaus.greve@uni-bonn.de
048
049
050 ---------------------------------------------------------------------------*/
051 package org.deegree.model.csct.ct;
052
053 // Miscellaneous
054 import java.awt.Shape;
055 import java.awt.geom.AffineTransform;
056 import java.awt.geom.Point2D;
057
058 import org.deegree.model.csct.pt.Matrix;
059
060
061 /**
062 * Transforms two-dimensional coordinate points. {@link CoordinateTransformation#getMathTransform}
063 * may returns instance of this interface when source and destination coordinate systems are both two
064 * dimensional. <code>MathTransform2D</code> extends {@link MathTransform} by adding some methods
065 * for easier interoperability with <A HREF="http://java.sun.com/products/java-media/2D/">Java2D</A>.
066 * If the transformation is affine, then <code>MathTransform</code> shall be an immutable instance of
067 * {@link AffineTransform}.
068 *
069 * @version 1.00
070 * @author OpenGIS (www.opengis.org)
071 * @author Martin Desruisseaux
072 */
073 public interface MathTransform2D extends MathTransform
074 {
075 /**
076 * Transforms the specified <code>ptSrc</code> and stores the result in <code>ptDst</code>.
077 * If <code>ptDst</code> is <code>null</code>, a new {@link Point2D} object is allocated
078 * and then the result of the transformation is stored in this object. In either case,
079 * <code>ptDst</code>, which contains the transformed point, is returned for convenience.
080 * If <code>ptSrc</code> and <code>ptDst</code> are the same object, the input point is
081 * correctly overwritten with the transformed point.
082 *
083 * @param ptSrc the specified coordinate point to be transformed.
084 * @param ptDst the specified coordinate point that stores the
085 * result of transforming <code>ptSrc</code>, or
086 * <code>null</code>.
087 * @return the coordinate point after transforming <code>ptSrc</code>
088 * and stroring the result in <code>ptDst</code>.
089 * @throws TransformException if the point can't be transformed.
090 */
091 public abstract Point2D transform(final Point2D ptSrc, final Point2D ptDst) throws TransformException;
092
093 /**
094 * Transform the specified shape. This method may replace straight lines by
095 * quadratic curves when applicable. It may also do the opposite (replace
096 * curves by straight lines). The returned shape doesn't need to have the
097 * same number of points than the original shape.
098 *
099 * @param shape Shape to transform.
100 * @return Transformed shape, or <code>shape</code> if
101 * this transform is the identity transform.
102 * @throws TransformException if a transform failed.
103 */
104 public abstract Shape createTransformedShape(final Shape shape) throws TransformException;
105
106 /**
107 * Gets the derivative of this transform at a point. The derivative is the
108 * matrix of the non-translating portion of the approximate affine map at
109 * the point.
110 *
111 * @param point The coordinate point where to evaluate the derivative. Null value is
112 * accepted only if the derivative is the same everywhere. For example affine
113 * transform accept null value since they produces identical derivative no
114 * matter the coordinate value. But most map projection will requires a non-null
115 * value.
116 * @return The derivative at the specified point as a 2×2 matrix. This method
117 * never returns an internal object: changing the matrix will not change the
118 * state of this math transform.
119 * @throws NullPointerException if the derivative dependents on coordinate and <code>point</code> is <code>null</code>.
120 * @throws TransformException if the derivative can't be evaluated at the specified point.
121 */
122 public abstract Matrix derivative(final Point2D point) throws TransformException;
123 }