### Question:
FrustumGeometry extends AbstractScalableMeshGeometry { @Override public FrustumGeometry derive(BaseRenderProperties renderProperties, Constraints constraints) throws ClassCastException { return new FrustumGeometry(createBuilder(), (ScalableMeshRenderProperties)renderProperties, constraints); } FrustumGeometry(FrustumGeometry.Builder<?> builder, ScalableMeshRenderProperties renderProperties,
            Constraints constraints); @Override FrustumGeometry clone(); @Override Builder<? extends Position> createBuilder(); @Override FrustumGeometry derive(BaseRenderProperties renderProperties, Constraints constraints); final float getBaseRadius(); final int getCircularPoints(); final float getTopRadius();  }### Answer:
@Test public void testDerive() { FrustumGeometry.Builder<GeographicPosition> builder = new FrustumGeometry.Builder<GeographicPosition>(); builder.setDataModelId(3423L); builder.setRapidUpdate(true); builder.setBaseRadius(.123f); builder.setTopRadius(.0321f); builder.setCircularPoints(13); builder.setPosition(new GeographicPosition(LatLonAlt.createFromDegrees(34., 56.))); ScalableMeshRenderProperties renderProperties1 = new DefaultMeshScalableRenderProperties(65763, false, true); TimeConstraint timeConstraint = TimeConstraint.getTimeConstraint(TimeSpan.get(10L, 20L)); Constraints constraints1 = new Constraints(timeConstraint); FrustumGeometry geom = new FrustumGeometry(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.getBaseRadius(), ((FrustumGeometry)derived).getBaseRadius(), 0.f); Assert.assertEquals(geom.getTopRadius(), ((FrustumGeometry)derived).getTopRadius(), 0.f); Assert.assertEquals(geom.getCircularPoints(), ((FrustumGeometry)derived).getCircularPoints()); Assert.assertEquals(geom.getPolygonVertexCount(), ((FrustumGeometry)derived).getPolygonVertexCount()); Assert.assertEquals(geom.getPosition(), ((FrustumGeometry)derived).getPosition()); Assert.assertEquals(geom.getColors(), ((FrustumGeometry)derived).getColors()); Assert.assertEquals(geom.getNormals(), ((FrustumGeometry)derived).getNormals()); Assert.assertEquals(geom.getPositions(), ((FrustumGeometry)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()); }