001         package com.croftsoft.core.math.geom;
002    
003         import java.io.*;
004    
005         import com.croftsoft.core.io.SerializableLib;
006         import com.croftsoft.core.lang.NullArgumentException;
007         import com.croftsoft.core.lang.Testable;
008    
009         /*********************************************************************
010         * A mutable point in three-dimensional real space (x, y, z).
011         *
012         * @version
013         *   2003-04-13
014         * @since
015         *   2002-02-06
016         * @author
017         *   <a href="https://www.croftsoft.com/">David Wallace Croft</a>
018         *********************************************************************/
019    
020         public class  Point3DD
021           extends Point2DD
022           implements PointXYZ, Cloneable, Serializable, Testable
023         //////////////////////////////////////////////////////////////////////
024         //////////////////////////////////////////////////////////////////////
025         {
026    
027         private static final long  serialVersionUID = 0L;
028    
029         //
030    
031         public double  z;
032    
033         //////////////////////////////////////////////////////////////////////
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             Point3DD  point3DD1 = new Point3DD ( 0, 1, 2 );
048    
049             byte [ ]  bytes = SerializableLib.compress ( point3DD1 );
050    
051             Point3DD  point3DD2 = ( Point3DD ) SerializableLib.load (
052               new ByteArrayInputStream ( bytes ) );
053    
054             System.out.println ( point3DD2 );
055    
056             return point3DD2.equals ( point3DD1 )
057               && point3DD1.equals ( ( Point3DD ) point3DD1.clone ( ) );
058           }
059           catch ( Exception  ex )
060           {
061             ex.printStackTrace ( );
062    
063             return false;
064           }
065         }
066    
067         //////////////////////////////////////////////////////////////////////
068         //////////////////////////////////////////////////////////////////////
069    
070         public  Point3DD (
071           double  x,
072           double  y,
073           double  z )
074         //////////////////////////////////////////////////////////////////////
075         {
076           this.x = x;
077    
078           this.y = y;
079    
080           this.z = z;
081         }
082    
083         public  Point3DD ( )
084         //////////////////////////////////////////////////////////////////////
085         {
086         }
087    
088         public  Point3DD ( PointXYZ  pointXYZ )
089         //////////////////////////////////////////////////////////////////////
090         {
091           NullArgumentException.check ( pointXYZ );
092    
093           x = pointXYZ.getX ( );
094    
095           y = pointXYZ.getY ( );
096    
097           z = pointXYZ.getZ ( );
098         }
099    
100         //////////////////////////////////////////////////////////////////////
101         //////////////////////////////////////////////////////////////////////
102    
103         public double  getZ ( ) { return z; }
104    
105         //////////////////////////////////////////////////////////////////////
106         //////////////////////////////////////////////////////////////////////
107    
108         public void  setXYZ (
109           double  x,
110           double  y,
111           double  z )
112         //////////////////////////////////////////////////////////////////////
113         {
114           this.x = x;
115    
116           this.y = y;
117    
118           this.z = z;
119         }
120    
121         public void  setXYZ ( PointXYZ  pointXYZ )
122         //////////////////////////////////////////////////////////////////////
123         {
124           x = pointXYZ.getX ( );
125    
126           y = pointXYZ.getY ( );
127    
128           z = pointXYZ.getZ ( );
129         }
130    
131         public void  setZ ( double  z ) { this.z = z; }
132    
133         //////////////////////////////////////////////////////////////////////
134         //////////////////////////////////////////////////////////////////////
135    
136         public boolean  equals ( Object  other )
137         //////////////////////////////////////////////////////////////////////
138         {
139           if ( other == null )
140           {
141             return false;
142           }
143    
144           if ( !other.getClass ( ).equals ( Point3DD.class ) )
145           {
146             return false;
147           }
148    
149           Point3DD  that = ( Point3DD ) other;
150    
151           return ( this.x == that.x )
152             &&   ( this.y == that.y )
153             &&   ( this.z == that.z );
154         }
155    
156         public int  hashCode ( )
157         //////////////////////////////////////////////////////////////////////
158         {
159           // This might be a poor choice for a hash code algorithm.
160    
161           return new java.lang.Double ( x ).hashCode ( )
162                ^ new java.lang.Double ( y ).hashCode ( )
163                ^ new java.lang.Double ( z ).hashCode ( );
164         }
165    
166         public String  toString ( )
167         //////////////////////////////////////////////////////////////////////
168         {
169           return "(" + x + "," + y + "," + z + ")";
170         }
171    
172         //////////////////////////////////////////////////////////////////////
173         //////////////////////////////////////////////////////////////////////
174         }