2016-07-30 5 views
0

The documentation for this gives a couple of examples но я не могу найти ничего, что бы проходило через то, что делает каждая настройка в преобразовании.Есть ли хорошее объяснение Drawing2D.Matrix где угодно?

Я пытаюсь придумать преобразование, которое сделает вертикальный щелчок того, что нарисовано.

благодарит - Дэйва

ответ

0

Преобразование хранится в виде матрицы 3х3, и трудно сказать, интуитивно, что каждый из компонентов матрицы делает. Вот почему вам предоставляется набор функций для работы, которые вы можете объединить. Например, если вы хотите, чтобы повернуть изображение на 90 градусов по часовой стрелке, а затем сделать его в два раза больше, вы можете использовать

Matrix myMatrix = new Matrix(); 
myMatrix.Rotate(90); 
myMatrix.Scale(2, 2, MatrixOrder.Append); 

MatrixOrder.Append указывает на то, что масштабирование должно быть сделано после того, как предыдущие преобразования (порядок здесь важно).

Основные функции, которые вы хотите использовать, являются:

  • RotateAt(Single a, Point o) поворачивает изображение по часовой стрелке вокруг точки
  • Scale(Single a, Single b) масштабирует изображение в X и Y осей - в основном, (х, у) становится (ax, by)
  • Translate(Single a, Single b) преобразует изображение по осям X и Y - в основном, (x, y) становится (a + x, b + y).

Чтобы перевернуть изображение по вертикали, вам просто нужен Scale(-1, 1). Каждая точка (x, y) будет преобразована в (-x, y). Если вам нужно перевернуть изображение вокруг другой вертикальной оси, чем ось y = 0, вам необходимо объединить его с Translate.

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

Here - более подробное объяснение. Он включает в себя некоторый код в конце.

 Смежные вопросы

  • Нет связанных вопросов^_^