Масштабирование увеличивает или уменьшает расстояния между точками, но оно должно работать относительно некоторого центра. Представьте себе расширяющуюся сферу. Точки на краю этой сферы двигаются быстро, точки, более близкие к центру, двигаются медленнее. Точка в центре сферы совершенно неподвижна. Эта точка называется центром расширения или точкой расширения (expansion point).
Точно так же, как можно поворачивать объект вокруг произвольной точки, объект можно и масштабировать вокруг произвольной точки. Это выполняется так же, как и поворот.
Сначала точка расширения перемещается в начало координат. Затем выполняется масштабирование. После этого точка расширения перемещается в исходную позицию. Эта последовательность операций выражается такой формулой:2Р-преобразования и рендеринг_107
Сочетание преобразований
Одни преобразования можно сочетать с другими преобразованиями. Собственно говоря, мы уже это делали в этой главе. Выполняя вращение или масштабирование относительно произвольной точки, мы перемещали центр вращения или центр расширения в начало координат, выполняли операцию и перемещали центр обратно. Это практически три преобразования, объединенных в одно.
Можно совместить две матрицы вращения в одну, как показано на рисунке 4.10. Предположим, что нам нужно выполнить два поворота. Назовем их R± и R2. Пусть угол поворота R± (в) равен 45°, а угол поворота R2 равен 30°. Эти повороты можно объединить, просуммировав углы. В результате будет выполнен поворот на 75°.
R1(e = 30°) R2(e = 45°) R1R2
Рис. 4.10. Объединение поворотов
Если выражать это в виде матриц, нужно создать матрицу вращения для каждого из объединяемых поворотов, а потом перемножить эти матрицы. Перемножив поворачиваемую точку и полученную матрицу, мы получим требуемое новое положение точки. Затевать такую возню ради перемещения точки в двумерной системе координат нет особого смысла. Но если мы будем работать в трехмерном пространстве, то быстро поймем, почему именно так объединяются повороты во всех играх.
Масштабирующие преобразования можно сочетать точно так же, как и повороты. Если промасштабировать объект сначала с коэффициентом 2, а потом еще раз - с коэффициентом 3, то результат будет тот же, что и при одном масштабировании с коэффициентом 6. Другими словами, если Sx = 21 и S2 = 31, то SjS2 = 61. Это демонстрирует рисунок 4.11.
Можно объединить поворот и масштабирование. Предположим, что RS - это поворот, после которого следует масштабирование, a SR - это масштабирование, после которого следует поворот. Хотя последовательность выполнения отдельных поворотов в группе поворотов и порядок выполнения масштабирований в группе масштабирований не играет роли в двумерных системах координат, порядок выполнения комбинированных поворотов и масштабирований может оказаться важным, если sx 5* sy в масштабирующих преобразованиях. Чтобы убедиться в этом, взглянитеКак видите, поворот после масштабирования и поворот до масштабирования приводят к абсолютно разным результатам. Так что в общем случае порядок преобразований имеет значение.
Friday, June 20th, 2008 | Author: admin
Category: Матрицы
You can follow any responses to this entry through the RSS 2.0 feed.
You can leave a response, or trackback from your own site.
Leave a Reply
