Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
1-3965
sword
2003-09-20 10:52
2003.10.02
Как нарисовать таблицу в Richedit e


4-4170
XAMLO
2003-07-31 00:19
2003.10.02
Showmessage на чистом API?


1-3893
_VaaL_
2003-09-12 10:19
2003.10.02
COM. Правильная инициализация/закрытие


1-3945
Goshi
2003-09-20 00:18
2003.10.02
Как отловить завершение работы программы через ShellExecute


11-3814
Igit
2003-01-19 09:47
2003.10.02
Как такое будет в MCK





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский