Рассчитать преобразование объекта, чтобы выровнять его с другим

Скажем, у меня есть два прямоугольника, каждый с "соединителем", который указывает в определенном направлении. Преобразование (местоположение и угол) ссылки указывается относительно центра ее родительского прямоугольника.

В приведенном ниже примере ссылка прямоугольника 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
Другие вопросы по тегам