Форум: "Media";
Текущий архив: 2003.10.02;
Скачать: [xml.tar.bz2];
ВнизВращение вокруг точки Найти похожие ветки
← →
Rel_ (2003-06-05 17:04) [0]Народ, кто сталкивался, подскажите:
Есть массив точек. A: array of TPoint.
Его необходимо поворачивать вокруг точки B : TPoint, например на угол "x" по таймеру и отрисовывать в виде полигона.
После поворота координаты точек должны сохраняться в исходном массиве A и новые координаты пересчитываются уже на их основе.
На экране должно наблюдаться вращение полигона вокруг заданной точки.
Как энто сделать???
← →
Axis_of_Evil (2003-06-05 17:14) [1]Удалено модератором
← →
VMcL (2003-06-05 19:33) [2]>Rel_ (05.06.03 17:04)
Загляни в справочник по математике: "Поворот координат".
← →
Sheng (2003-06-06 00:21) [3]Умножить на матрицу поворота!
Главная матрица перемещений
----------------------------------
Главной матрицей перемещений будем называть такую матрицу, в которой 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¦
Если вы теперь умножите вершины объекта на эту матрицу, то получите перемещенный, повернутый и масштабированный объект.
← →
Sheng (2003-06-06 00:23) [4]Круто, а?
← →
Думкин (2003-06-06 05:39) [5]При данной постановке задачи - матрица поворота не меняется.
Меняются координаты точек.
Остальное как и описано.
← →
Rel_ (2003-06-06 08:53) [6]Спасибо огромное.
to Axis_of_Evil © - вот только ругаться не надо было. Я впервой с энтим столкнулся - знал что сущ-ет абсолютно стандартное решение - вот и спросил.
Страницы: 1 вся ветка
Форум: "Media";
Текущий архив: 2003.10.02;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.009 c