Program: 11209
Project: 11209
Buggy source:
private void animate(){
  LatLon l1=LatLon.fromDegrees(-27,133.5);
  LatLon l2=LatLon.fromDegrees(-21.0474,119.6494);
  Zoom zoom1=Zoom.fromCameraZoom(6378137);
  Zoom zoom2=Zoom.fromCameraZoom(559794);
  Heading heading1=Heading.fromDegrees(-170);
  Heading heading2=Heading.fromDegrees(180);
  Pitch pitch1=Pitch.fromDegrees(0);
  Pitch pitch2=Pitch.fromDegrees(70);
  Pitch pitch3=Pitch.fromDegrees(45);
  MotionParams motion1=new MotionParams(0.2,0.2,0,0);
  MotionParams motion2=new MotionParams(5,5,0,0);
  final CameraPath path=new CameraPath(l1,l1,zoom1,heading1,pitch1);
  path.addCenter(l2,l2,null,20,motion1);
  path.addZoom(zoom2,10,motion1);
  path.addHeading(heading2,20,motion2);
  path.addPitch(pitch2,10,motion2);
  path.addPitch(pitch3,20,motion2);
  Thread thread=new Thread(new Runnable(){
    public void run(){
      View v=wwd.getSceneController().getView();
      if (!(v instanceof OrbitView))       return;
      OrbitView view=(OrbitView)v;
      boolean detectCollisions=view.isDetectCollisions();
      view.setDetectCollisions(false);
      double totalTime=path.getTime();
      double startTime=System.currentTimeMillis() / 1000d;
      double currentTime=0;
      while (currentTime <= totalTime) {
        currentTime=System.currentTimeMillis() / 1000d - startTime;
        LatLon center=path.getCenter(currentTime);
        Zoom zoom=path.getZoom(currentTime);
        Heading heading=path.getHeading(currentTime);
        Pitch pitch=path.getPitch(currentTime);
        view.setCenterPosition(new Position(center.getLatLon(),0));
        view.setZoom(zoom.toCameraZoom());
        view.setHeading(heading.getAngle());
        view.setPitch(pitch.getAngle());
        wwd.redrawNow();
      }
      view.setDetectCollisions(detectCollisions);
    }
  }
);
  thread.start();
}

Fixed version (ground truth):
private void animate(){
  LatLon l1=LatLon.fromDegrees(-27,133.5);
  LatLon l2=LatLon.fromDegrees(-21.0474,119.6494);
  Zoom zoom1=Zoom.fromCameraZoom(6378137);
  Zoom zoom2=Zoom.fromCameraZoom(559794);
  Heading heading1=Heading.fromDegrees(-180);
  Heading heading2=Heading.fromDegrees(180);
  Pitch pitch1=Pitch.fromDegrees(0);
  Pitch pitch2=Pitch.fromDegrees(70);
  Pitch pitch3=Pitch.fromDegrees(45);
  MotionParams motion1=new MotionParams(0.2,0.2,0,0);
  MotionParams motion2=new MotionParams(5,5,0,0);
  final CameraPath path=new CameraPath(l1,l1,zoom1,heading1,pitch1);
  path.addCenter(l2,l2,null,20,motion1);
  path.addZoom(zoom2,10,motion1);
  path.addHeading(heading2,20,motion2);
  path.addPitch(pitch2,10,motion2);
  path.addPitch(pitch3,20,motion2);
  Thread thread=new Thread(new Runnable(){
    public void run(){
      View v=wwd.getSceneController().getView();
      if (!(v instanceof OrbitView))       return;
      OrbitView view=(OrbitView)v;
      boolean detectCollisions=view.isDetectCollisions();
      view.setDetectCollisions(false);
      double totalTime=path.getTime();
      double startTime=System.currentTimeMillis() / 1000d;
      double currentTime=0;
      while (currentTime <= totalTime) {
        currentTime=System.currentTimeMillis() / 1000d - startTime;
        LatLon center=path.getCenter(currentTime);
        Zoom zoom=path.getZoom(currentTime);
        Heading heading=path.getHeading(currentTime);
        Pitch pitch=path.getPitch(currentTime);
        view.setCenterPosition(new Position(center.getLatLon(),0));
        view.setZoom(zoom.toCameraZoom());
        view.setHeading(heading.getAngle());
        view.setPitch(pitch.getAngle());
        wwd.redrawNow();
      }
      view.setDetectCollisions(detectCollisions);
    }
  }
);
  thread.start();
}