Существует разница между "четырехугольником" и "прямоугольником".
Если у вас есть средняя точка сверху и снизу и длина сторон, остальное просто.
Дано:
(x1, y1) -- (top_middle_x, top_middle_y) -- (x2, y1)
(x1, y2) -- (btm_middle_x, btm_middle_y) -- (x2, y2)
и длина верха / низа вместе с длиной вправо / влево.
x1 = top_middle_x - top / bottom_length / 2;
x2 = x1 + top / bottom_length;
y1 = top_middle_y
y2 = bottom_middle_y
Очевидно, что это самый простой случай, и предполагается, что линия (tmx, tmy) (bmx, bmy) находится исключительно вдоль оси Y.
Мы назовем эту линию "средней линией".
Следующий трюк состоит в том, чтобы взять среднюю линию и вычислить ее смещение вращения от оси Y.
Теперь мой триг супер ржавый.
dx = tmx - bmx, dy = tmy - bmy.
Итак, тангенс угла равен dy / dx. Арктангенс (dy / dx) - это угол линии.
Отсюда вы можете ориентироваться.
(помните, есть игры с квадрантами, знаками и прочим, чтобы понять это правильно - но в этом суть).
Получив ориентацию, вы можете «повернуть» линию обратно к оси Y. Посмотрите 2D графику для математики, это прямо вперед.
Это возвращает вам вашу обычную ориентацию. Затем вычислите точки прямоугольников в этой новой нормальной форме и, наконец, поверните их обратно.
Виола. Прямоугольник.
Другие вещи, которые вы можете сделать, это «повернуть» линию, которая на половину длины «верхней» линии, на 90 градусов от средней линии. Итак, скажем, у вас есть средняя линия, которая составляет 45 градусов. Вы должны начать эту строку с tmx, tmy и повернуть ее на 135 градусов (90 + 45). Эта точка будет вашим «верхним левым» углом. Поверните это -45 (45 - 90), чтобы получить "верхнюю правую" точку. Затем сделайте что-то похожее с нижними точками.