Математическая задача:Получение координат По Положению и углу наклона

StackOverflow https://stackoverflow.com/questions/3077814

Вопрос

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

я пытаюсь изменить положение и повернуть прямоугольник.однако мне нужно повернуть прямоугольник от точки, которая равна не 0,0, а в соответствии с тем, насколько сильно сместились его координаты.я уверен, что в этом нет особого смысла, поэтому я сделал несколько набросков, которые помогут объяснить, что мне нужно.

alt text

на изображении выше показаны 3 стадии перемещения красного прямоугольника от 0% до 100%.координаты X и Y красного прямоугольника (вверху слева от красного прямоугольника) перемещают только процент высоты синего прямоугольника.

alt text

красный прямоугольник может вращаться.фокусируясь только на среднем примере ("Расстояние -50%") сверху, где красный прямоугольник перемещен на -50 высоты синего прямоугольника, его новый угол на изображении выше теперь равен - 45º.он был повернут от своей точки 0, 0.

alt text

теперь моя проблема в том, что я хочу, чтобы его точка вращения отражала его положение.

красный и синий прямоугольники имеют одинаковый размер, но противоположную ширину и высоту.поскольку координаты 0,0 красного прямоугольника теперь составляют -50% от высоты синего прямоугольника, и поскольку они имеют противоположные ширину и высоту, я хочу, чтобы точка поворота составляла 50% от ширины красного прямоугольника (или 50% от высоты синего прямоугольника, что одно и то же).

вместо того, чтобы специально указывать красному прямоугольнику поворачиваться на 50% от его ширины, чтобы делать то, что я хочу, мне нужно эмулировать это, используя формулу, которая расположит координаты X и Y красного прямоугольника так, чтобы точка поворота отражала его положение.

Это было полезно?

Решение

Вот иллюстрированный раствор вашей проблемы:

Method for determining position deltas from an off-centre rotation.

Другие советы

На самом деле все довольно просто.

1. Давайте остановимся на вашей точке, вокруг которой вы хотите повернуть прямоугольник, т.е.точка вращения (RP), который не перемещается, когда вы поворачиваете свой прямоугольник.Давайте предположим, что точка представлена ромбом на рисунке ниже.

alt text

2. Переведите 4 пункта так , чтобы RP находится в (0,0).Предположим, что координаты этой точки равны (RPx,RPy), поэтому вычтите все 4 угла прямоугольника по этим координатам.

alt text

3. Поверните точки с помощью матрица вращения (который поворачивает точку против часовой стрелки вокруг начала координат на некоторый угол, который теперь является точкой поворота благодаря предыдущему перемещению):

alt text

На следующем рисунке показан прямоугольник, повернутый на 45° против часовой стрелки.

alt text

4. Переместите прямоугольник обратно (добавив RP по всем 4 пунктам):alt text

Я предполагаю, что это то, чего вы хотите :)

Я точно не понимаю, что вам нужно, но кажется, что процедура вращения прямоугольника вокруг произвольной точки может помочь.

Предположим, что мы хотим повернуть точку (x, y) d радианов вокруг происхождения (0,0). Формула для расположения повернутой точки:

x' = x*cos(d) - y*sin(d)
y' = x*sin(d) + y*cos(d)

Теперь мы не хотим вращаться вокруг происхождения, но вокруг данной точки (A, B). То, что мы делаем, сначала переместите происхождение в (A, B), затем примените формулу вращения выше, а затем переместите начало начала до (0,0).

x' = (x-a)*cos(d) - (y-b)*sin(d) + a
y' = (x-a)*sin(d) + (y-b)*cos(d) + b

Это ваша формула для вращения точки (x, y) d радианов вокруг точки (a, b).

Для вашей проблемы (a, b) будет точка на полпути на правой стороне синего прямоугольника, а (x, y) будет каждый угол красного прямоугольника. Формула дает (x ', y') для координат углов повернутого красного прямоугольника.

Похоже, вы можете избежать более сложного вращения более искусственно изначально позиционированием? Например, в последнем примере положите красную коробку на «-25% синей высоты» и «-25% красной высоты» - если я следую вашей схеме ссылки - затем выполните хочее вращение.

Если вы знаете происхождение O и точку P на стороне повернутого прямоугольника, вы можете рассчитать вектор между двумя:

alt text
(источник: уравненияheet.com.)

Вы можете получить угол между вектором и осью X, принимая точечный продукт с этим вектором:

alt text
(источник: уравненияheet.com.)

Учитывая это, вы можете преобразовать любую точку в прямоугольнике, умножив его по матрице вращения:

alt text
(источник: уравненияheet.com.)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top