Позвольте мне попытаться дать вам что-то среднее между ответом Светлой Искры и ответом Эллиота, потому что из того, что я прочитал, вы действительно ищете алгоритм, которым нужно следовать, а не просто бросаете математику.
Постановка задачи: учитывая, что у вас есть местоположение A (50, 50)
и заголовок (так как вы его не указали, я буду утверждать его как y = 2 * x + 25
), найдите, где B (80, 90)
относительно A
и заголовок.
То, что вы хотите сделать, на самом деле довольно просто. 1) Переместитесь A
в источник вашей системы. Это просто означает, что локальные A
значения будут глобальными значениями позиции минус глобальные значения позиции A
. A
становится (0, 0)
и B
становится (30, 40)
.
1.1) Заголовок также необходимо переместить. Это на самом деле очень легко сделать, потому что y-перехват в локальных A
терминах всегда равен 0, и наклон не изменится, поэтому мы имеем y = 2 * x
в качестве заголовка.
2) Теперь нам нужно выровнять предыдущий заголовок по оси X. Итак, как мы это сделаем? Концептуально самый простой способ сделать это - преобразовать координаты x, y в полярную систему координат. Полярная система координат включает R
в себя расстояние до местоположения и phi
угол поворота от оси x. R
определяется как sqrt(x^2 + y^2)
и phi
определяется как atan(y / x)
. Большинство компьютерных языков в наши дни идут вперед и определяют atan2(y, x)
функцию, которая делает то же самое, что и atan(y/x)
делает, таким образом, чтобы выходной сигнал имел тенденцию быть от -180 градусов до 180 градусов, а не от 0 градусов до 360 градусов, но работал бы либо.
B
таким становится R = sqrt(30^2 + 40^2) = sqrt(2500) = 50
и phi = atan2(40, 30) = 53.13
в градусах.
Точно так же заголовок теперь изменяется. Это немного сложно объяснить, но это потому, что заголовок, по определению, всегда проходит через наше происхождение A
, нам не нужно беспокоиться о R
компоненте. Заголовки всегда будет в форме , phi = C
где C
является константой. В этом случае phi = atan(2 * x / x) = atan(2) = 63.435
градусов.
Теперь мы можем повернуть систему, чтобы переместить курс на ось X локальной A
системы. Подобно тому, как мы перешли A
к источнику системы, все, что нам нужно сделать, это вычесть phi
заголовок из всех phi
значений в системе. Так что phi
из B
становится 53.13 - 63.435 = -10.305
градусов.
Наконец, мы должны преобразовать обратно из полярных координат в координаты x, y. Формула для этого преобразования X = R * cos(phi)
и Y = R * sin(phi)
. Ибо, B
следовательно, мы получаем, X = 50 * cos(-10.305) = 49.2
и Y = 50 * sin(-10.305) = 8.9
поэтому B
в локальных A
координатах близко к (49,9)
.
Надеюсь, это поможет, и достаточно легко на математике для вас, чтобы следовать.