예제 #1
0
파일: TestAll.java 프로젝트: stden/volume
  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);
  }