//      Vec3D.java//      This class defines a three-dimensional vector.class Vec3D {	public double x,y,z;			     // Vec3D components		public Vec3D() { x=y=z=0; }		   // constructors	public Vec3D(double pX, double pY)	{	x=pX;	y=pY;	z=0;	}	public Vec3D(double pX, double pY, double pZ)	{	x=pX;	y=pY;	z=pZ;	}	// settors		public void Set(double pX, double pY)	{	x=pX;	y=pY;	z=0;	}	public void Set(double pX, double pY, double pZ)	{	x=pX;	y=pY;	z=pZ;	}	// Vec3D arithmatic	public Vec3D Plus(Vec3D pV) 	{ return new Vec3D( x+pV.x, y+pV.y, z+pV.z ); }	public void Add(Vec3D pV) 	{ x = x+pV.x; y = y+pV.y; z = z+pV.z; }	public Vec3D Minus(Vec3D pV) 	{ return new Vec3D( x-pV.x, y-pV.y, z-pV.z );  }	public void Subtract(Vec3D pV) 	{ x = x-pV.x; y = y-pV.y; z = z-pV.z; }	public double Dot(Vec3D pV)		 // dot product	{ return x*pV.x + y*pV.y + z*pV.z; }	public Vec3D Cross(Vec3D pV)	 // cross product	{ return new Vec3D( y*pV.z-z*pV.y, z*pV.x-x*pV.z, x*pV.y-y*pV.x );  }	public Vec3D Times(double pR)	   // * a scalar	{ return new Vec3D( x*pR, y*pR, z*pR );  }	public Vec3D DividedBy(double pR)	   // divide by a scalar	{ return new Vec3D( x/pR, y/pR, z/pR );  }	// magnitude	public double LenSqr()	{ return x*x+y*y+z*z; }	public double Length()	{ return Math.sqrt(LenSqr()); }	// projection (component of this parallel to pV)	// Note: component perpendicular to pV is:  *this - Proj(pV)	public Vec3D Proj(Vec3D pV)	{ return pV.Times(this.Dot(pV) / pV.LenSqr()); }	// cosine of the angle between two Vec3Ds:	public double CosAng( Vec3D pV)	{ return this.Dot(pV) / (Length() * pV.Length()); }	// comparison	public boolean equals( Vec3D pV)	{ return x==pV.x && y==pV.y && z==pV.z; }	public boolean notEquals( Vec3D pV)	{ return x!=pV.x || y!=pV.y || z!=pV.z; }	// input/output	public String toString()	{ return "(" + this.x + "," + this.y + "," + this.z + ")"; }}