SanchelliosProg
@SanchelliosProg
Java, Android, Software Testing

Как построить синусоиду между двумя известными координатами (Java)?

Здравствуйте, друзья.

Уж простите, что я свосем забыл математику, но вопрос надо быстро решить, а я начинаю закапываться (очень много дел). Рассчитываю на Вашу помощь.

Имеются две координаты (географические):
a = (61.044039; 28.156276)
b = (42.689624; 23.402102)

Между ними путь в виде синусоиды в периоде 2*Пи. Движемся мы вдоль широты. Нужно нарисовать на карте 30 точек на этой синусоиде, равноудалённых друг от друга. Как это сделать средствами Java? Точнее, как вычислить эти точки (я их при вычислении добавить должен в коллекции), как их расположить я знаю))))
  • Вопрос задан
  • 1421 просмотр
Пригласить эксперта
Ответы на вопрос 1
fornit1917
@fornit1917
Ох, не трогал тригонометрию лет 8, но можно попробовать...
Дальнейшие рассуждения будут для декартовой системы координат, в принципе наверн можно и на ширину/долготу распространить.

пусть (x1, y1) и (x2, y2) заданные точки.
Синусоиду надо искать в виде K*sin(x+a)+b, где K, a и b некоторые константы, которые надо найти

Имеем:
K*sin(x1+a)+b = y1
K*sin(x2+a)+b = y2

На K можно разделить и логика дальнейшая не поменяется, поэтому я для простоты сразу буду считать K=1:
sin(x1+a)+b = y1
sin(x2+a)+b = y2

Откуда:

sin(x1+a) - sinx(x2+a) = y2 - y1

По формуле разницы синусов:

2 * cos((x1+x2+2a)/2) * cos((x1-x2)/2) = y2 - y1

Заменим x1+x2+2a = t, и получим:
cos(t) = (y2 - y1) / (2*cos((x1-x2)/2))
В правой части число, которое мы можем вычислить. Имеем простейшее тригонометрическое уравнение, из которого легко найти t (www.bymath.net/studyguide/tri/sec/tri16.htm). Знаем t - знаем a. Подставим в sin(x1+a)+b = y1 и найдем b.

Собственно все, теперь рисуем график f(x) = sin(x+a) + b

ЗЫ: стоит отметить, то решений может и не быть, т.к. не через любые две точки можно провести синусоиду с периодом 2пи

ЗЫ2: возможно, что я где-то не прав, решение выше написал с наскоку, что называется - на коленке.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы