### Question:
EllipseScalableGeometry extends AbstractScalableGeometry { @Override public EllipseScalableGeometry derive(BaseRenderProperties renderProperties, Constraints constraints) throws ClassCastException { return new EllipseScalableGeometry(createBuilder(), (ScalableRenderProperties)renderProperties, constraints); } EllipseScalableGeometry(EllipseScalableGeometry.Builder builder, ScalableRenderProperties renderProperties,
            Constraints constraints); @Override EllipseScalableGeometry clone(); @Override Builder createBuilder(); @Override EllipseScalableGeometry derive(BaseRenderProperties renderProperties, Constraints constraints); float getAngle(); int getPointsNumber(); Projection getProjection(); float getSemiMajorAxis(); float getSemiMinorAxis();  }### Answer:
@Test public void testDerive() { EllipseScalableGeometry.Builder builder = new EllipseScalableGeometry.Builder(); builder.setDataModelId(3423L); builder.setRapidUpdate(true); builder.setAngleDegrees(.8f); builder.setPointsNumber(21); builder.setSemiMajorAxis(.02f); builder.setSemiMinorAxis(.01f); builder.setPosition(new GeographicPosition(LatLonAlt.createFromDegrees(34., 56.))); ScalableRenderProperties renderProperties1 = new DefaultScalableRenderProperties(65763, false, true, false); TimeConstraint timeConstraint = TimeConstraint.getTimeConstraint(TimeSpan.get(10L, 20L)); Constraints constraints1 = new Constraints(timeConstraint); EllipseScalableGeometry geom = new EllipseScalableGeometry(builder, renderProperties1, constraints1); AbstractRenderableGeometry absGeom = geom; BaseRenderProperties renderProperties2 = renderProperties1.clone(); Constraints constraints2 = new Constraints(timeConstraint); AbstractRenderableGeometry derived = absGeom.derive(renderProperties2, constraints2); Assert.assertNotSame(geom, derived); Assert.assertEquals(geom.getDataModelId(), derived.getDataModelId()); Assert.assertEquals(geom.getAngle(), ((EllipseScalableGeometry)derived).getAngle(), 0.f); Assert.assertEquals(geom.getSemiMajorAxis(), ((EllipseScalableGeometry)derived).getSemiMajorAxis(), 0.f); Assert.assertEquals(geom.getSemiMinorAxis(), ((EllipseScalableGeometry)derived).getSemiMinorAxis(), 0.f); Assert.assertEquals(geom.getPointsNumber(), ((EllipseScalableGeometry)derived).getPointsNumber()); Assert.assertEquals(geom.getPolygonVertexCount(), ((EllipseScalableGeometry)derived).getPolygonVertexCount()); Assert.assertEquals(geom.getPosition(), ((EllipseScalableGeometry)derived).getPosition()); Assert.assertEquals(geom.getColors(), ((EllipseScalableGeometry)derived).getColors()); Assert.assertEquals(geom.getNormals(), ((EllipseScalableGeometry)derived).getNormals()); Assert.assertEquals(geom.getPositions(), ((EllipseScalableGeometry)derived).getPositions()); Assert.assertEquals(geom.isRapidUpdate(), derived.isRapidUpdate()); Assert.assertNotSame(geom.getRenderProperties(), derived.getRenderProperties()); Assert.assertSame(renderProperties2, derived.getRenderProperties()); Assert.assertNotSame(geom.getConstraints(), derived.getConstraints()); Assert.assertSame(constraints2, derived.getConstraints()); }