private static List<Position> calculateRangeCirclePoints(final SatPos pos,
			double incrementDegrees) {

		final double radiusKm = pos.getRangeCircleRadiusKm();

		final double latitude = pos.latitude;
		final double longitude = pos.longitude;
		final double beta = radiusKm / R0;
		List<Position> result = new ArrayList<Position>();
		for (int azi = 0; azi < 360; azi += incrementDegrees) {
			final double azimuth = (azi / 360.0) * 2.0 * Math.PI;
			double rangelat = Math.asin(Math.sin(latitude) * Math.cos(beta)
					+ Math.cos(azimuth) * Math.sin(beta) * Math.cos(latitude));
			final double num = Math.cos(beta)
					- (Math.sin(latitude) * Math.sin(rangelat));
			final double den = Math.cos(latitude) * Math.cos(rangelat);
			double rangelong;

			if (azi == 0 && (beta > ((Math.PI / 2.0) - latitude))) {
				rangelong = longitude + Math.PI;
			} else if (azi == 180 && (beta > ((Math.PI / 2.0) - latitude))) {
				rangelong = longitude + Math.PI;
			} else if (Math.abs(num / den) > 1.0) {
				rangelong = longitude;
			} else {
				if ((180 - azi) >= 0) {
					rangelong = longitude - Math.acos(num / den);
				} else {
					rangelong = longitude + Math.acos(num / den);
				}
			}

			while (rangelong < 0.0) {
				rangelong += Math.PI * 2.0;
			}

			while (rangelong > Math.PI * 2.0) {
				rangelong -= Math.PI * 2.0;
			}

			rangelat = (rangelat / (2.0 * Math.PI)) * 360.0;
			rangelong = (rangelong / (2.0 * Math.PI)) * 360.0;

			// if (rangelong < 180.0) {
			// rangelong = -rangelong;
			// }
			// else if (rangelong > 180.0) {
			// rangelong = 360.0 - rangelong;
			// }
			//
			// if (rangelat < 90.0) {
			// rangelat = -rangelat;
			// }
			// else if (rangelat > 90.0) {
			// rangelat = 180.0 - rangelat;
			// }

			result.add(new Position(rangelat, rangelong));

		}

		return result;
	}