gpt4 book ai didi

c# - 如何在不移动矩形的情况下剪切矩形?

转载 作者:太空宇宙 更新时间:2023-11-03 19:16:31 24 4
gpt4 key购买 nike

我想问一下是否可以在不实际移动物体的情况下剪切物体。这是我现在正在做的代码

        Matrix matrix = new Matrix();
matrix.Shear(2, 0);

g.Transform = matrix ;
g.DrawRectangle(Pens.Black, new Rectangle(200, 200, 100, 100));
g.ResetTransform();

enter image description here

最佳答案

剪切因子相对于坐标系的原点。

因此,为了将剪切结果保持在“相同”位置,您需要添加平移矩阵。

  1. 创建一个平移,将应该静止的点移动到坐标系的原点。在这个例子中,静态点是 (200,300) 所以平移是 (-200, -300)
  2. 应用翻译
  3. 剪切
  4. 创建翻译的逆向。在示例中:(200, 300)
  5. 应用反向翻译

顺便说一句:确保您 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));
}
}

关于c# - 如何在不移动矩形的情况下剪切矩形?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16232004/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com