Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Вращение вокруг точки


Rel_ ©   (2003-06-05 17:04:00) 

Народ, кто сталкивался, подскажите:

Есть массив точек. A: array of TPoint.
Его необходимо поворачивать вокруг точки B : TPoint, например на угол "x" по таймеру и отрисовывать в виде полигона.

После поворота координаты точек должны сохраняться в исходном массиве A и новые координаты пересчитываются уже на их основе.
На экране должно наблюдаться вращение полигона вокруг заданной точки.

Как энто сделать???


Rel_   (2003-06-06 08:53:00) [1]

Спасибо огромное.

to Axis_of_Evil © - вот только ругаться не надо было. Я впервой с энтим столкнулся - знал что сущ-ет абсолютно стандартное решение - вот и спросил.


Думкин   (2003-06-06 05:39:00) [2]

При данной постановке задачи - матрица поворота не меняется.
Меняются координаты точек.
Остальное как и описано.


Sheng   (2003-06-06 00:23:00) [3]

Круто, а?


Sheng   (2003-06-06 00:21:00) [4]

Умножить на матрицу поворота!


Главная матрица перемещений
----------------------------------
Главной матрицей перемещений будем называть такую матрицу, в которой x_translation и y_translation - это коэффициенты перемещения объекта по осям X и Y. Вот как она выглядит:
¦ ¦
¦1 0 0¦
¦0 1 0¦
¦x_translation y_translation 1¦
¦ ¦


Главная матрица масштабирования
--------------------------------------
Главная матрица масштабирования - это такая матрица, в которой scale_x и scale_y - это коэффициенты масштабирования объекта по координатам x и y:

¦scale_x 0 0¦
¦0 scale_y 0¦
¦0 0 1¦

Такая матрица позволяет выполнять неоднородное масштабирование - мы можем задать один масштаб по оси X и другой - по оси Y. Таким образом, если мы хотим масштабировать объект однородно, то должны задать scale_x = scale_y.

- 107 -
Главная матрица поворотов
-------------------------------
В главной матрице поворотов angle - это угол, на который вы хотите повернуть объект:
¦cos(angle) -sin(angle) 0¦
¦sin(angle) cos(angle) 0¦
¦0 0 1¦


Общая матрица масштабирования, поворотов и перемещений
----------------------------------------------------------
Наступает торжественный момент. Теперь мы возьмем матрицы перемещения, масштабирования и поворота и перемножим их (получим их конкатенацию), чтобы получить общую матрицу, реализующую все три функции сразу. Окончательно матрица будер выглядеть так:

¦scale_x x cos(angle) scale_x x -sin(angle) 0¦
¦scale_y x sin(angle) ( angle)

Умножить на матрицу поворота!


Главная матрица перемещений
----------------------------------
Главной матрицей перемещений будем называть такую матрицу, в которой x_translation и y_translation - это коэффициенты перемещения объекта по осям X и Y. Вот как она выглядит:
¦ ¦
¦1 0 0¦
¦0 1 0¦
¦x_translation y_translation 1¦
¦ ¦


Главная матрица масштабирования
--------------------------------------
Главная матрица масштабирования - это такая матрица, в которой scale_x и scale_y - это коэффициенты масштабирования объекта по координатам x и y:

¦scale_x 0 0¦
¦0 scale_y 0¦
¦0 0 1¦

Такая матрица позволяет выполнять неоднородное масштабирование - мы можем задать один масштаб по оси X и другой - по оси Y. Таким образом, если мы хотим масштабировать объект однородно, то должны задать scale_x = scale_y.

- 107 -
Главная матрица поворотов
-------------------------------
В главной матрице поворотов angle - это угол, на который вы хотите повернуть объект:
¦cos(angle) -sin(angle) 0¦
¦sin(angle) cos(angle) 0¦
¦0 0 1¦


Общая матрица масштабирования, поворотов и перемещений
----------------------------------------------------------
Наступает торжественный момент. Теперь мы возьмем матрицы перемещения, масштабирования и поворота и перемножим их (получим их конкатенацию), чтобы получить общую матрицу, реализующую все три функции сразу. Окончательно матрица будер выглядеть так:

¦scale_x x cos(angle) scale_x x -sin(angle) 0¦
¦scale_y x sin(angle) scale_y x cos(angle) 0¦
¦x_translation y_translation 1¦

Если вы теперь умножите вершины объекта на эту матрицу, то получите перемещенный, повернутый и масштабированный объект.


VMcL   (2003-06-05 19:33:00) [5]

>Rel_ (05.06.03 17:04)

Загляни в справочник по математике: "Поворот координат".


Axis_of_Evil   (2003-06-05 17:14:00) [6]

Удалено модератором


Наверх

Титульная страница Поиск, карта сайта Написать письмо