Изменить источник преобразования матричного преобразования - PullRequest
3 голосов
/ 07 марта 2011

У меня есть System.Drawing.Drawing2D.Matrix с преобразованиями вращения и перевода, которые мне нужно применить к спрайту.К сожалению, начало вращения находится в верхнем левом углу спрайта.

Как изменить начало вращения на центр спрайта?

Ответы [ 3 ]

3 голосов
/ 07 марта 2011

В данный момент ваша матрица преобразования состоит из поворота (начало слева вверху), умноженного на перевод (от оригинала вверху слева до нового вверху слева).

Чтобы изменить начало вращения, вам нужно сначала выполнить другой перевод:

Перевести (-half width, -half height), чтобы центрировать объект
Затем вращение (теперь центрируется по центру спрайта) Затем окончательный перевод (плюс половина с половиной высоты, которую вы сняли на этапе 1).

2 голосов
/ 07 марта 2011

Существует также метод RotateAt(), который вы можете использовать для указания желаемой исходной точки.просто передайте PointF структуру в аргументе, где вы хотите, чтобы источник был.

http://msdn.microsoft.com/en-us/library/awacs0xh.aspx

0 голосов
/ 07 марта 2011

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

Однако я нашел решение, которое работает:
Я изменил значения полей OffsetX и OffsetY матрицы следующим образом:

OffsetX = OffsetX - M11 * hx - M21 * hy + hx;
OffsetY = OffsetY - M12 * hx - M11 * hy + hy;

Где hx - половина ширины, hy - половина высоты спрайта, а M11, M12 и M21 - соответствующие поля матрицы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...