Итак, предположим, что вы знаете, что такое матрица Мирового Преобразования для этого объекта A, вам просто нужно построить обратную матрицу, и вы получите то, что вам нужно.
Предположим, что матрицы поворота, масштабирования и перемещения объекта A, используемые для его доставки в Глобальное пространство, равны R , S и T соответственно. Вы умножите их вместе, как
S * R * T = W
Теперь возьмите W и найдите его обратное W ^ -1 . Инверсия матрицы - это та матрица, которая делает прямо противоположное. Произведение матрицы с ее обратной стороной всегда является единичной матрицей.
W * W ^ -1 = I
таким образом W ^ -1 = I / W ;
Теперь примените эту обратную матрицу как трансформацию мира к сцене, и каждый объект будет в нужных вам координатах.
Для умножения матрицы, см. Эту страницу.
Для матрицы идентичности, смотрите это.
Вот еще одна страница , которая дает вам матрицы, нужно будет сделать Вт .
В приведенном выше вопросе вы должны принять перевод по оси х за 50, перевод по оси у за 50, без масштабирования по любой оси и поворот, который вы не указали.
Я делал это с помощью тригонометрии, а не матриц в прошлом (я нуб-матрица). Ответ Ashes999 находится на полпути, получите относительный вектор, затем поверните его на угол, обратный углу EntityA.
источник
Позвольте мне попытаться дать вам что-то среднее между ответом Светлой Искры и ответом Эллиота, потому что из того, что я прочитал, вы действительно ищете алгоритм, которым нужно следовать, а не просто бросаете математику.
Постановка задачи: учитывая, что у вас есть местоположение
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)
.Надеюсь, это поможет, и достаточно легко на математике для вас, чтобы следовать.
источник
Вам необходимо знать позу сущности A в глобальном пространстве (x1, y1, θ), где θ - ориентация относительно оси x.
Чтобы преобразовать местоположение EntityB из глобальной координаты (x2, y2) в локальную координату (x2 ', y2'):
От глобального к местному
Локальный в Глобальный
Используя матрицы:
От глобального к местному
Локальный в Глобальный
источник
Проще говоря, для сущности B потребуется ссылка на сущность A. Затем вам необходимо получить разницу между позицией A субъекта и позицией B субъекта.
источник