Отладка Java-функции возвращает точку х расстояние вдоль линии - PullRequest
0 голосов
/ 10 сентября 2011
public Point getPointOnSegment(double length, int x1, int y1, int x2, int y2) {
    if(length==0) return new Point(x2, y2);
    double angle = Math.atan((double)(y2-y1)/(double)(x2-x1));

    return new Point((int)((length*Math.cos(angle))+x1), (int)((length*Math.sin(angle))+y1));
}

Я нашел эту функцию, которая должна возвращать точку на линии, которая равна x расстоянию вдоль этой линии. Но по какой-то причине он иногда возвращает точку в направлении, противоположном предполагаемому. Похоже, это происходит, если угол линии больше 180 градусов.

Я смотрю на это уже более 5 часов, и я боюсь, что я не замечал этого вопроса. Кто-нибудь может увидеть, в чем проблема, или предложить лучшую функцию для ее замены?

1 Ответ

2 голосов
/ 10 сентября 2011

Проблема в том, что вы теряете знаки со своим подразделением.Например, если оба расстояния отрицательны, результат будет положительным, как если бы оба были положительными.

Попробуйте рассчитать угол, используя метод atan2:

angle = Math.atan2((double)(y2-y1), (double)(x2-x1));

Эта функция учитывает знаки ваших различий во всех случаях и возвращает угол для всех часов.Он также обрабатывает особый случай, когда x2-x1 равен нулю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...