protected void applyLimits(Camera camera) { double distanceToExtents = this.wwd.distanceToViewGlobeExtents(); double minAltitude = 100; double maxAltitude = distanceToExtents; camera.altitude = WWMath.clamp(camera.altitude, minAltitude, maxAltitude); // Limit the tilt to between nadir and the horizon (roughly) double r = wwd.getGlobe().getRadiusAt(camera.latitude, camera.latitude); double maxTilt = Math.toDegrees(Math.asin(r / (r + camera.altitude))); double minTilt = 0; camera.tilt = WWMath.clamp(camera.tilt, minTilt, maxTilt); } }
protected void positionView(WorldWindow wwd) { Position mtRainier = new Position(46.852886, -121.760374, 4392.0); Position eye = new Position(46.912, -121.527, 2000.0); // Compute heading and distance from peak to eye Globe globe = wwd.getGlobe(); double heading = eye.greatCircleAzimuth(mtRainier); double distanceRadians = mtRainier.greatCircleDistance(eye); double distance = distanceRadians * globe.getRadiusAt(mtRainier.latitude, mtRainier.longitude); // Compute camera settings double altitude = eye.altitude - mtRainier.altitude; double range = Math.sqrt(altitude * altitude + distance * distance); double tilt = Math.toDegrees(Math.atan(distance / eye.altitude)); // Apply the new view Camera camera = new Camera(); camera.set(eye.latitude, eye.longitude, eye.altitude, WorldWind.ABSOLUTE, heading, tilt, 0.0 /*roll*/); wwd.getNavigator().setAsCamera(globe, camera); } }
/** * Ensures the correct calculation of the ellipsoidal radius at a geographic latitude. * * @throws Exception */ @Test public void testGetRadiusAt() throws Exception { // Test all whole number latitudes for (double lat = -90; lat <= 90; lat += 1.0) { double radiusExpected = computeRadiusOfEllipsoid(lat); double radiusActual = globe.getRadiusAt(lat, 0); assertEquals(Double.toString(lat), radiusExpected, radiusActual, 1.0e-8); } }
double heading = aircraft.greatCircleAzimuth(airport); double distanceRadians = aircraft.greatCircleDistance(airport); double distance = distanceRadians * globe.getRadiusAt(aircraft.latitude, aircraft.longitude);
this.lastY = dy; double globeRadius = this.wwd.getGlobe().getRadiusAt(lat, lon); double forwardDegrees = Math.toDegrees(forwardMeters / globeRadius); double sideDegrees = Math.toDegrees(sideMeters / globeRadius);
double heading = aircraft.greatCircleAzimuth(airport); double distanceRadians = aircraft.greatCircleDistance(airport); double distance = distanceRadians * globe.getRadiusAt(aircraft.latitude, aircraft.longitude); double tilt = Math.toDegrees(Math.atan(distance / aircraft.altitude));
this.lastY = dy; double globeRadius = this.wwd.getGlobe().getRadiusAt(lat, lon); double forwardDegrees = Math.toDegrees(forwardMeters / globeRadius); double sideDegrees = Math.toDegrees(sideMeters / globeRadius);