JavaScript
Дано две точки с координатами x1,y1 и x2,y2, Найдите формулу для расчета угла поворота второй точки относительно первой.
Можно использовать тригонометрические функции. Если нужно, возьмите одну из осей в качестве основы.
Точку нельзя повернуть и угла у точки не бывает. Угол может быть между отрезками / прямыми / векторами, но никак не между точками. Потому Для угла нужно минимум ТРИ точки - для формирования двух векторов.
Сначала находим точку, относительно которой будем поворачивать. Расстояние от этой точки до двух заданных должно совпадать. Из условия можно предположить, что эта точка должна лежать на одной из осей. Предположим, что эта точка лежит на оси X: (x0, 0). Если x1 = x2, придётся брать точку на оси Y (0, y0) - вычисления будут полностью аналогичными.
Получаем (** - "в степени"):
(x0 - x1) ** 2 + y1 ** 2 = (x0 - x2) ** 2 + y2 ** 2 =>
x0 * 2 * (x2 - x1) = (x2 ** 2 + y2 ** 2) - (x1 ** 2 + y1 ** 2) =>
x0 = ((x2 ** 2 + y2 ** 2) - (x1 ** 2 + y1 ** 2)) / (2 * (x2 - x1))
По свойствам скалярного произведения векторов находим косинус угла между векторами:
q = ((x2 - x0) * (x1 - x0) + y2 * y1) / (sqrt((x2 - x0) ** 2 + y2 ** 2) * sqrt((x1 - x0) ** 2 + y1 ** 2))
Ответ: arccos(q)
Сначала находим точку, относительно которой будем поворачивать. Расстояние от этой точки до двух заданных должно совпадать. Из условия можно предположить, что эта точка должна лежать на одной из осей. Предположим, что эта точка лежит на оси X: (x0, 0). Если x1 = x2, придётся брать точку на оси Y (0, y0) - вычисления будут полностью аналогичными.
Получаем (** - "в степени"):
(x0 - x1) ** 2 + y1 ** 2 = (x0 - x2) ** 2 + y2 ** 2 =>
x0 * 2 * (x2 - x1) = (x2 ** 2 + y2 ** 2) - (x1 ** 2 + y1 ** 2) =>
x0 = ((x2 ** 2 + y2 ** 2) - (x1 ** 2 + y1 ** 2)) / (2 * (x2 - x1))
По свойствам скалярного произведения векторов находим косинус угла между векторами:
q = ((x2 - x0) * (x1 - x0) + y2 * y1) / (sqrt((x2 - x0) ** 2 + y2 ** 2) * sqrt((x1 - x0) ** 2 + y1 ** 2))
Ответ: arccos(q)
Угол между двумя прямыми
tg (f) = +-(k2-k1)/(1+k1*k2), где k это y=kx+b
tg (f) = +-(k2-k1)/(1+k1*k2), где k это y=kx+b
Похожие вопросы
- Какая точка ближе к началу координат?
- Напишите на JavaScript программу расчета средней зарплаты пяти сотрудников фирмы.
- Нужно ли ставить точку с запятой после каждого выражения в JavaScript?
- JavaScript, зачем нужен второй await в данном примере
- Объясните формулы по этому коду. Почему именно так?
- Почему именно эта формула взята для random числа из диапазона ?
- Почему большинство прогеров не ставят точку с запятой в конце строчек кода при разработке приложений на js?
- Что такое стек c точки зрения javascript?
- Javascript. local storage. Дайте ссылку, где почитать о нем или сами объясните.
- Js первый код (портфолио)