Трансформации

Трансформация – это заданное изменение координатной системы, в которой отображается элемент. Описание таких трансформаций на плоскости, как масштабирование, отражение и поворот, можно выполнить в терминах числовых матриц размером 2х2. Чтобы представить в матричной форме операцию сдвига координатной системы, используют однородные координаты.

Однородными координатами точки (x, y) является тройка вида (x, y, 1). Если дана тройка чисел (a, b, c), соответствующая точка в однородных координатах находится после применения нормировки – деления на c: (a/c, b/c, 1). Тройки (a, b, 0) описывают в однородных координатах бесконечно удалённую точку.

В терминах однородных координат основные трансформации можно выразить следующим образом:

1. Масштабирование (включая отражения): .

2. Поворот на угол φ: .

3. Сдвиг: .

Комбинация трансформаций выполняется как умножение матриц.

В WPF трансформации представлены классами, унаследованными от абстрактного класса System.Windows.Media.Transform. Набор предопределённых трансформаций перечислен в табл. 6.

Таблица 6

Классы трансформаций

Имя класса Описание Важные свойства
TranslateTransform Смещает координатную систему на указанную величину X, Y
RotateTransform Поворачивает координатную систему вокруг заданной точки Angle, CenterX, CenterY
ScaleTransform Масштабирует координатную систему. Можно применять разную степень масштабирования по измерениям X и Y ScaleX, ScaleY, CenterX, CenterY
SkewTransform Деформирует координатную систему, наклоняя её оси на заданное число градусов AngleX, AngleY, CenterX, CenterY
MatrixTransform Выполняет трансформацию, используя указанную матрицу вида Matrix
TransformGroup Комбинирует несколько трансформаций. Порядок трансформаций имеет значение Children

Укажем некоторые способы задания трансформаций:

1. Класс UIElement определяет свойства RenderTransform и RenderTransformOrigin. RenderTransform – это трансформация, выполняемая после процесса компоновки непосредственно перед отображением элемента. RenderTransformOrigin задаёт стартовую (неподвижную) точку трансформации. По умолчанию это точка имеет координаты (0, 0) (координаты точки относительные, в терминах виртуального ограничивающего прямоугольника).

2. Класс FrameworkElement содержит свойство LayoutTransform для трансформации, применяемой до процесса компоновки.

3. Класс Brush имеет свойства RelativeTransform и Transform, позволяющие выполнить трансформацию кисти до и после её применения.

Следующий пример демонстрирует использование трансформаций.

<StackPanel Orientation="Horizontal">

<Button Height="40" Width="70" Content="Translate">

<Button.RenderTransform>

<TranslateTransform X="10" Y="-10"/>

</Button.RenderTransform>

</Button>

<Button Height="40" Width="70" Content="Rotate">

<Button.LayoutTransform>

<RotateTransform Angle="-45" />

</Button.LayoutTransform>

</Button>

<Button Height="40" Width="70" Content="Scale">

<Button.LayoutTransform>

<ScaleTransform ScaleX="-1" ScaleY="1.5" />

</Button.LayoutTransform>

</Button>

<Button Height="40" Width="70" Content="Skew">

<Button.RenderTransform>

<SkewTransform AngleX="20" AngleY="0" />

</Button.RenderTransform>

</Button>

<Button Height="40" Width="70" Content="Matrix">

<Button.LayoutTransform>

<MatrixTransform Matrix="1,0.5,1,-1,20,10" />

</Button.LayoutTransform>

</Button>

</StackPanel>

Рис. 32. Кнопки, подвергшиеся трансформации.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: