Математическая задача: получение координат с позиции и угла - PullRequest
3 голосов
/ 20 июня 2010

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

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

альтернативный текст http://www.freeimagehosting.net/uploads/5f0c9d5aa6.png

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

альтернативный текст http://www.freeimagehosting.net/uploads/a316b5650f.png

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

альтернативный текст http://www.freeimagehosting.net/uploads/9c97165908.png

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

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

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

Ответы [ 5 ]

4 голосов
/ 20 июня 2010

Это действительно очень просто.

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

alt text

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

alt text

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

alt text

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

alt text

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

Полагаю, это то, что вы хотите:)

4 голосов
/ 20 июня 2010

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

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

3 голосов
/ 20 июня 2010

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

Предположим, мы хотим повернуть точку (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') для координат углов повернутого красного прямоугольника.

0 голосов
/ 20 июня 2010

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

0 голосов
/ 20 июня 2010

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

альтернативный текст http://www.equationsheet.com/latexrender/pictures/9954bf8d997098ab327f37abd34eb70e.gif

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

альтернативный текст http://www.equationsheet.com/latexrender/pictures/a20a486c9afa2b9a33b8a0dab351a6ed.gif

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

альтернативный текст http://www.equationsheet.com/latexrender/pictures/9243080836834d7d86427d99d656f3e8.gif

...