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 }