Широта / долгота + расстояние + курс -> широта / долгота

Итак: у меня есть следующая функция, адаптированная по формуле, найденной в Интернете, которая берет две координаты широты / долготы и находит расстояние между ними в милях (вдоль сферической Земли):

public static double distance (double lat1, double lon1, double lat2, double lon2) {
        double theta = toRadians(lon1-lon2);
        lat1 = toRadians(lat1);
        lon1 = toRadians(lon1);
        lat2 = toRadians(lat2);
        lon2 = toRadians(lon2);

        double dist = sin(lat1)*sin(lat2) + cos(lat1)*cos(lat2)*cos(theta);
        dist = toDegrees(acos(dist)) * 60 * 1.1515 * 1.609344 * 1000;

        return dist;
    }

Насколько я могу сказать, это работает просто отлично.

Мне нужна вторая функция, которая, используя точно такую ​​же модель геометрии Земли, берет одну широту / долготу [A], курс и расстояние и выводит новую пару широта / долгота [B], так что если вы начали в точке [A] и прошли указанное расстояние по заданному курсу, вы окажетесь в точке [B].

Здесь тот факт, что мои навыки геометрии оставили меня полностью, вступает в игру :)

Любая помощь приветствуется!

Спасибо, Дэн