СообЧа > База Знаний > Программирование > Delphi

Вопрос

Есть некая фигура, нарисованная в TPaintbox (к примеру, пятиконечная звезда) как ее повращать? Как изменять скорость вращения?

Ответ

Если есть координаты x и y всех вершин, то это очень просто.
По шагам.
1. Создаем массив, который содержит координаты всех точек (удобно сделать одномерный массив типа TPoint). Это будет исходный массив.
2. СоздаJм второй такой же массив и при инициализации программы записываем туда данные из исходного.
3. Теперь немного теории: для поворота на плоскости относительно центра координат на угол L надо:
записать координаты x,y в виде матрицы-строки:
( x y )
и матрично умножить их на матрицу поворота:
( cos(L) sin(L) )
( -sin(L) cos(L) ).

В итоге имеем конечные формулы: x2 = x1*cos(L) — y1*sin(L); y2 = x1*sin(L) + y*cos(L), где x2, y2 — новые координаты, x1, y1 — старые координаты, а L — угол поворота.
Зачем создавали второй массив. Дело в том, что результат умножения — вещественный, а координаты — целые. Поэтому каждый раз придется округлять результат и в конце (после длительного вращения) получатся очень сильные искажения. Поэтому надо делать так:
Берем x,y из исходного массива (это будет x1, y1 в формулах). Делаем преобразования и результат записываем во второй массив (x2, y2).
Так пробегаем в цикле для всех точек. А потом соединяем линиями точки из второго массива.
На следующей итерации переписываем во второй массив исходный и увеличиваем угол. Делаем все тоже самое, только угол уже другой.
Т.е. получается, что мы повернули на некоторый угол, затем вернули назад, затем увеличили угол и опять повернули.
Теперь все это можно повесить на таймер.
Скорость вращения изменяется либо углом, либо интервалом таймера, хотя признаюсь, ни тот, ни другой не являются правильными — для этого существуют специальные математические преобразования, которых я не знаю.

Из конференции Expert_FAQ



Copyright © 2000-2004 Сообщество Чайников
Контактная информация