Узнать координаты центра прямоугольника после поворота и смещения

введите сюда описание изображенияУ меня есть координаты прямоугольника ABCD и его угол поворота. у меня есть координата клика - точка g. По клику рисуется зеленый прямоугольник с известными координатами и добавляется к черному прямоугольнику левым верхним углом - точкой g. Мне нужно добиться прилегания зеленого прямоугольника к черному, как это нарисовано голубым. Позиционирование прямоугольника происходит через его центр - в зеленом это точка P. вопрос - как найти точку X? Спасибо за подсказки, советы и направления, в какую сторону копать)


Ответы (2 шт):

Автор решения: MBo

В векторном виде:

x = g + (d-a) / |d-a| * половину высоты голубого 

(из описания неясно, как задаются размеры голубого и зеленого, возможно, нужная величина - (g.y-p.y) )

→ Ссылка
Автор решения: DiD

Сначала надо найти точку отсчета. Пусть она будет по середине между точками C и D

ox = cx + (dx - cx) / 2
oy = cy + (dy - cy) / 2

Дальше нужно получить угол поворота относительно прямоугольника

ang = Math.atan2(dx - cx, dy - cy) + Math.PI / 2

Здесь + Math.PI / 2 - это прямой угол от наклоненной линии. Там он либо + либо -. Попробовать оба варианта.

Дальше посчитаем полу-высоту прямоугольника:

radix = (gy - my) / 2

И посчитаем саму точку центра прямоугольника:

centerX = ox + radix * Math.sin(ang)
centerY = oy - radix * Math.cos(ang)

Если не запутался нигде, то вроде все верно

→ Ссылка