Рассчитать преобразование объекта, чтобы выровнять его с другим - PullRequest
0 голосов
/ 28 января 2019

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

В приведенном ниже примере ссылка прямоугольника A имеет вид (x: 0, y: -0.5, вращение: 0)в то время как B - (x: 0,5, y: 0, вращение: 45).

Два прямоугольника могут «вставлять» друг друга, вращаясь так, что их связи имеют одинаковые координаты и обращены в разные стороны.

Diagram

Я пытаюсь выяснить, как рассчитать преобразование прямоугольника B относительно прямоугольника A после того, как они связаны.

В этомВ этом случае прямоугольник A равен (0, 0, 0), ссылка A - (0, 0,5, 0), ссылка B - (0, 0,5, 180), а B - (~ 0,3, ~ -0,8, 135).

Кто-нибудь знает, как рассчитать окончательную позицию B в приведенном выше примере?

1 Ответ

0 голосов
/ 28 января 2019

Таким образом, у вас есть базовые точки 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
...