public void testParabolicSurface() throws Exception { double C = 10.0; double leftwall = -16.0, rightwall = 16.1, floor = 12.0; ParabolicSurfaceParams[] P = new ParabolicSurfaceParams[1]; P[0] = new ParabolicSurfaceParams(); P[0].A = 0; P[0].B = 0; P[0].C = C; P[0].W = 100; ParabolicSurface surface = new ParabolicSurface(P, leftwall, rightwall, floor); assertEquals(-16.0, surface.leftwall); assertEquals(16.1, surface.rightwall); assertEquals(12.0, surface.floor); double eps = 0.00001; // testLeftWall assertEquals(Math.abs(surface.leftwall), surface.testWallsFloor(Math.PI / 2), eps); assertEquals(Math.abs(surface.leftwall), surface.getRange(0, Math.PI / 2)); // testRightWall assertEquals(Math.abs(surface.rightwall), surface.testWallsFloor(-Math.PI / 2), eps); assertEquals(Math.abs(surface.rightwall), surface.getRange(0, -Math.PI / 2)); // testFloor assertEquals(Double.POSITIVE_INFINITY, surface.testWallsFloor(0), eps); assertEquals(surface.floor, surface.testWallsFloor(Math.PI), eps); assertEquals(surface.floor * Math.sqrt(2), surface.testWallsFloor(Math.PI - Math.PI / 4), eps); assertEquals(surface.floor * Math.sqrt(2), surface.testWallsFloor(Math.PI + Math.PI / 4), eps); assertEquals(C * Math.sqrt(2), surface.getRange(0, Math.PI / 4), eps); double save = surface.floor; surface.floor = 9.12; assertEquals(surface.floor, surface.testWallsFloor(Math.PI)); assertEquals(surface.floor, surface.getRange(0, Math.PI)); surface.floor = save; assertEquals(C, surface.getRange(0, 0)); assertEquals( surface.floor * Math.sqrt(2), surface.testWallsFloor(Math.PI / 2 + Math.PI / 4), eps); assertEquals(C * Math.sqrt(2), surface.getRange(0, -Math.PI / 4), eps); for (double phi = -Math.PI / 4 + Math.PI; phi < Math.PI / 4 + Math.PI; phi += 0.1) assertEquals(C, surface.getRange(0, phi) * -Math.cos(phi), eps); }