Позвольте мне попытаться дать вам что-то среднее между ответом Светлой Искры и ответом Эллиота, потому что из того, что я прочитал, вы действительно ищете алгоритм, которым нужно следовать, а не просто бросаете математику.
Постановка задачи: учитывая, что у вас есть местоположение 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).
Надеюсь, это поможет, и достаточно легко на математике для вас, чтобы следовать.