001         package com.croftsoft.core.math.geom;
002    
003         import java.awt.Point;
004         import java.awt.geom.Point2D;
005         import java.io.*;
006    
007         import com.croftsoft.core.io.SerializableLib;
008         import com.croftsoft.core.lang.Testable;
009    
010         /*********************************************************************
011         * A Point2D.Double extension implementing accessor interface PointXY.
012         *
013         * @version
014         *   2003-04-13
015         *
016         * @since
017         *   2003-03-20
018         *
019         * @author
020         *   <a href="http://www.CroftSoft.com/">David Wallace Croft</a>
021         *********************************************************************/
022    
023         public class  Point2DD
024           extends Point2D.Double
025           implements PointXY, Serializable, Testable
026         //////////////////////////////////////////////////////////////////////
027         //////////////////////////////////////////////////////////////////////
028         {
029    
030         private static final long  serialVersionUID = 0L;
031    
032         //////////////////////////////////////////////////////////////////////
033         // static unit test methods
034         //////////////////////////////////////////////////////////////////////
035    
036         public static void  main ( String [ ]  args )
037         //////////////////////////////////////////////////////////////////////
038         {
039           System.out.println ( test ( args ) );
040         }
041    
042         public static boolean  test ( String [ ]  args )
043         //////////////////////////////////////////////////////////////////////
044         {
045           try
046           {
047             Point2DD  point2DD1 = new Point2DD ( 0, 1 );
048    
049             byte [ ]  bytes = SerializableLib.compress ( point2DD1 );
050    
051             Point2DD  point2DD2 = ( Point2DD ) SerializableLib.load (
052               new ByteArrayInputStream ( bytes ) );
053    
054             System.out.println ( point2DD2 );
055    
056             return point2DD2.equals ( point2DD1 );
057           }
058           catch ( Exception  ex )
059           {
060             ex.printStackTrace ( );
061    
062             return false;
063           }
064         }
065    
066         //////////////////////////////////////////////////////////////////////
067         // constructor methods
068         //////////////////////////////////////////////////////////////////////
069    
070         public  Point2DD (
071           double  x,
072           double  y )
073         //////////////////////////////////////////////////////////////////////
074         {
075           this.x = x;
076    
077           this.y = y;
078         }
079    
080         public  Point2DD ( PointXY  pointXY )
081         //////////////////////////////////////////////////////////////////////
082         {
083           x = pointXY.getX ( );
084    
085           y = pointXY.getY ( );
086         }
087    
088         public  Point2DD ( Point2D  point2D )
089         //////////////////////////////////////////////////////////////////////
090         {
091           x = point2D.getX ( );
092    
093           y = point2D.getY ( );
094         }
095    
096         public  Point2DD ( )
097         //////////////////////////////////////////////////////////////////////
098         {
099         }
100    
101         //////////////////////////////////////////////////////////////////////
102         // mutator methods
103         //////////////////////////////////////////////////////////////////////
104    
105         public void  setX ( double  x ) { this.x = x; }
106    
107         public void  setY ( double  y ) { this.y = y; }
108    
109         public void  setXY ( PointXY  pointXY )
110         //////////////////////////////////////////////////////////////////////
111         {
112           x = pointXY.getX ( );
113    
114           y = pointXY.getY ( );
115         }
116    
117         public void  setXY (
118           double  x,
119           double  y )
120         //////////////////////////////////////////////////////////////////////
121         {
122           this.x = x;
123    
124           this.y = y;
125         }
126    
127         public void  setXY ( Point  point )
128         //////////////////////////////////////////////////////////////////////
129         {
130           x = point.x;
131    
132           y = point.y;
133         }
134    
135         //////////////////////////////////////////////////////////////////////
136         // math methods
137         //////////////////////////////////////////////////////////////////////
138    
139         /*********************************************************************
140         * The angle, in radians, from this point to the other point.
141         * Note that the direction of 0 radians is along the positive x-axis
142         * and PI/2 radians is along the positive y-axis.
143         *********************************************************************/
144         public double  angleTo ( PointXY  otherPointXY )
145         //////////////////////////////////////////////////////////////////////
146         {
147           return Math.atan2 (
148             otherPointXY.getY ( ) - y,
149             otherPointXY.getX ( ) - x );
150         }
151    
152         public double  distanceXY ( PointXY  otherPointXY )
153         //////////////////////////////////////////////////////////////////////
154         {
155           return distance ( otherPointXY.getX ( ), otherPointXY.getY ( ) );
156         }
157    
158         //////////////////////////////////////////////////////////////////////
159         // overridden Object methods
160         //////////////////////////////////////////////////////////////////////
161    
162         public String  toString ( )
163         //////////////////////////////////////////////////////////////////////
164         {
165           return "(" + x + "," + y + ")";
166         }
167    
168         //////////////////////////////////////////////////////////////////////
169         // private serialization methods
170         //////////////////////////////////////////////////////////////////////
171    
172         private void  writeObject ( ObjectOutputStream  objectOutputStream )
173           throws IOException
174         //////////////////////////////////////////////////////////////////////
175         {
176           objectOutputStream.defaultWriteObject ( );
177    
178           objectOutputStream.writeDouble ( x );
179    
180           objectOutputStream.writeDouble ( y );
181         }
182    
183         private void  readObject ( ObjectInputStream  objectInputStream )
184           throws IOException, ClassNotFoundException
185         //////////////////////////////////////////////////////////////////////
186         {
187           objectInputStream.defaultReadObject ( );
188    
189           x = objectInputStream.readDouble ( );
190    
191           y = objectInputStream.readDouble ( );
192         }
193    
194         //////////////////////////////////////////////////////////////////////
195         //////////////////////////////////////////////////////////////////////
196         }