Рассчитать преобразование объекта, чтобы выровнять его с другим
Скажем, у меня есть два прямоугольника, каждый с "соединителем", который указывает в определенном направлении. Преобразование (местоположение и угол) ссылки указывается относительно центра ее родительского прямоугольника.
В приведенном ниже примере ссылка прямоугольника A (x: 0, y: -0.5, вращение: 0), а B - (x: 0.5, y: 0, вращение: 45).
Два прямоугольника могут "подключаться" друг к другу, вращаясь так, что их связи имеют одинаковые координаты и обращены в разные стороны.
Я пытаюсь выяснить, как рассчитать преобразование прямоугольника B относительно прямоугольника A после того, как они связаны.
В этом случае прямоугольник A равен (0, 0, 0), ссылка A - (0, 0,5, 0), ссылка B - (0, 0,5, 180), а B - (~0,3, ~-0,8, 135).
Кто-нибудь знает, как рассчитать окончательную позицию B в приведенном выше примере?
1 ответ
Итак, у вас есть базовые очки A0
а также B0
и ссылки AL
а также BL
Сначала вы двигаетесь B0
по разнице AL
а также BL
, так
B0' = B0 + AL - BL
Затем вы должны повернуть эту точку вокруг AL
предоставить окончательную позицию
B0''.X = AL.X + (B0.X - BL.X) * Cos(D) - (B0.Y - BL.Y) * Sin(D)
B0''.Y = AL.Y + (B0.X - BL.X) * Sin(D) + (B0.Y - BL.Y) * Cos(D)
где D
угол поворота
D = Pi - A_rotation - B_rotation