CCRay3 extends CCLine3Base { @Override public CCRay3 clone() { return new CCRay3(this); } CCRay3();  CCRay3(final CCRay3 theSource);  CCRay3(final CCVector3 theOrigin, final CCVector3 theDirection); static CCRay3 createFromLine(CCVector3 theStart, CCVector3 theEnd); CCRay3 set(final CCRay3 theSource); double getDistanceToPrimitive(final CCVector3[] theWorldVertices); boolean intersects(final CCVector3[] thePolygonVertices, final CCVector3 theLocationStore); boolean intersectsTriangle(
		final CCVector3 theA, 
		final CCVector3 theB, 
		final CCVector3 theC, 
		final CCVector3 theLocationStore
	); boolean intersectsTrianglePlanar(
		final CCVector3 pointA, 
		final CCVector3 pointB, 
		final CCVector3 pointC,
		final CCVector3 locationStore
	); boolean intersectsQuad(
		final CCVector3 theA, 
		final CCVector3 theB, 
		final CCVector3 theC, 
		final CCVector3 theD,
		final CCVector3 theLocationStore
	); boolean intersectsQuadPlanar(
		final CCVector3 theA, 
		final CCVector3 theB, 
		final CCVector3 theC, 
		final CCVector3 theD,
		final CCVector3 theLocationStore
	); CCVector3 intersectsPlane(final CCPlane thePlane, CCVector3 theLocationStore); CCVector3 intersectsPlane(final CCPlane thePlane); double distanceSquared(final CCVector3 thePoint, final CCVector3 theStore); static boolean isValid(final CCRay3 theRay); @Override String toString(); @Override boolean equals(final Object theObject); @Override CCRay3 clone();  }
@Test public void testClone() { final CCRay3 ray1 = new CCRay3(); final CCRay3 ray2 = ray1.clone(); assertEquals(ray1, ray2); assertNotSame(ray1, ray2); }