001    //$HeadURL: svn+ssh://rbezema@svn.wald.intevation.org/deegree/base/branches/2.2_testing/src/org/deegree/io/rtree/HyperPoint.java $
002    //
003    //RTree implementation.
004    //Copyright (C) 2002-2004 Wolfgang Baer - WBaer@gmx.de
005    //
006    //This library is free software; you can redistribute it and/or
007    //modify it under the terms of the GNU Lesser General Public
008    //License as published by the Free Software Foundation; either
009    //version 2.1 of the License, or (at your option) any later version.
010    //
011    //This library is distributed in the hope that it will be useful,
012    //but WITHOUT ANY WARRANTY; without even the implied warranty of
013    //MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
014    //Lesser General Public License for more details.
015    //
016    //You should have received a copy of the GNU Lesser General Public
017    //License along with this library; if not, write to the Free Software
018    //Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
019    
020    package org.deegree.io.rtree;
021    
022    import java.io.Serializable;
023    
024    /**
025     * <p>
026     * Point in multidimensional space.
027     * Based on double coordinates.
028     * </p>
029     * @author Wolfgang Baer - WBaer@gmx.de
030     */
031    public class HyperPoint implements Serializable {
032            
033        private double[] coords;
034    
035        /**
036             * Constructor.<br>
037             * Length of given array sets the dimension.
038             * @param coords - array with double values of the coordinates.
039         */
040        public HyperPoint( double[] coords ) {
041            //this.coords = coords;
042            this.coords = new double[] { coords[0], coords[1] };
043        }
044    
045        /**
046             * Creates a null HyperPoint with coordinates Double.NaN.
047             * Mostly used internal.
048             * @param dimension - int for dimension of point
049         * @return HyperPoint
050         */
051            protected static HyperPoint getNullHyperPoint(int dimension) {
052            double[] point = new double[dimension];
053            for ( int i = 0; i < dimension; i++ )
054                point[i] = Double.NaN;
055            return new HyperPoint( point );
056        }
057    
058        /**
059         * Returns the coordinates as double array.
060         * @return double[]
061         * 
062         */
063        public double[] getCoords() {
064            return coords;
065        }
066    
067        /**
068             * Returns the coordinate for given index.
069             * @param index - int
070             * @return double -  coordinate
071         */
072        public double getCoord( int index ) {
073            return coords[index];
074        }
075    
076        /**
077             * Returns the dimension of the HyperPoint.
078             * @return int 
079         */
080        public int getDimension() {
081            return coords.length;
082        }
083    
084        /**
085             * Builds a String representation of the HyperPoint.
086             * @return String 
087         */
088        public String toString() {
089            String ret = "";
090    
091            for ( int i = 0; i < coords.length; i++ ) {
092                ret += ( coords[i] + ", " );
093            }
094    
095            return ret;
096        }
097    
098        /**
099             * Implements equals
100             * @see java.lang.Object#equals(java.lang.Object)
101         */
102        public boolean equals( Object obj ) {
103            HyperPoint point = (HyperPoint)obj;        
104            for ( int i = 0; i < coords.length; i++ ) {
105                            if(this.coords[i] != point.coords[i]) 
106                    return false;                   
107            }
108            return true;
109        }
110    
111            
112        /**
113             * Implements clone.
114             * @see java.lang.Object#clone()
115         */
116        protected Object clone() {
117            double[] point = new double[coords.length];
118    
119            for ( int i = 0; i < coords.length; i++ )
120                point[i] = coords[i];
121    
122            return new HyperPoint( point );
123        }
124    }