![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вращение вокруг точки
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]
Удалено модератором