Сначала начните с перевода ваших точек в локальную касательную плоскость. Мы будем использовать тот факт, что ваши треугольники намного меньше радиуса Земли. (Касательное пространство таково, что равные дельты в каждой из двух координат соответствуют равным расстояниям)
Это делается путем деления долготы на грех (лат):
A_local_x = A_lat_rads;
A_local_y = A_lon_rads/sin(A_lat_rads);
Тогда
Длина вычислений:
double ABsquared = (A_local_x - B_local_x)*(A_local_x - B_local_x) + (A_local_y - B_local_y)*(A_local_y - B_local_y);
double BCsquared = ..., ACsquared.
Наконец:
bool obtuse = (ABsquared+BCsquared < ACsquared) || (ABsquared+ACsquared < BCsquared);
Тупой означает, что "это не в пределах линии", как вы говорите. Я не проверяю, является ли треугольник ABC тупым, но являются ли углы в B и в A тупыми. Вот и все.
примечание: Я не проверял этот код. Скажите, пожалуйста, как это работает, подключив разные точки, если есть ошибка, я ее исправлю.