сдвиговой факторы относительно начала системы координат.
Чтобы сохранить результат сдвига в «том же» месте, вам нужно добавить матрицу перевода.
- Создайте перевод, который перемещает точку, которая должна быть статичной в начало координат. В примере статическая точка (200300), поэтому перевод (-200, -300)
- применяются переводу
- Shear
- создать инверсию перевода. В примере: (200, 300)
- применить обратный перевод
КСТАТИ: Убедитесь, что вы Dispose
матрицы и другие объекты GDI + !!
Matrix matrix = new Matrix();
matrix.Translate(200, 300);
matrix.Shear(2, 0);
matrix.Translate(-200, -300);
g.Transform = matrix ;
g.DrawRectangle(Pens.Black, new Rectangle(200, 200, 100, 100));
g.ResetTransform();
Или
using (var g = this.CreateGraphics())
{
using(Matrix translation = new Matrix(),
reverseTranslation = translation.Clone(),
sheer = new Matrix()
combination = new Matrix())
{
translation.Translate(200, 300);
reverseTranslation.Invert();
sheer.Shear(2, 0);
combination.Multiply(translation);
combination.Multiply(sheer);
combination.Multiply(reverseTranslation);
g.Transform = combination;
g.DrawRectangle(Pens.Black, new Rectangle(200, 200, 100, 100));
g.ResetTransform();
g.DrawRectangle(Pens.Black, new Rectangle(200, 200, 100, 100));
}
}
и как я могу подсчитать значения для его перевода? Я не могу заставить его работать – Patryk
Я добавил шаги к моему ответу –
и как «создать обратный перевод»? использовать функцию инвертировать? он не принимает никаких аргументов – Patryk