Ха!У вашего алгоритма серьезные проблемы с данными, которые вы ему предоставляете.Обе ваши точки данных в качестве примера имели x1 = x2
, поэтому, когда он вычислял rho
, он должен был найти:
float rho = atan(
(-y1 + y2) /
0
);
И деление на ноль является проблемой.Я не знаю, почему он просто дал вам мусорные данные, а не ошибку.
Ваш алгоритм должен работать нормально, если ваши две точки не находятся прямо друг над другом.Вы могли бы это исправить, добавив специальный случай, если x1 = x2 and y1 > y2
, тогда пусть rho
будет pi/2
, а если x1=x2 and y1 < y2
, то пусть rho
будет -pi/2
.Похоже, что вы уже ответили на свой вопрос на math.stackexchange, но мне жаль, что никто не ответил, поэтому я подумал, что я опубликую ...