C# 如何剪切矩形而不移动它?

C# 如何剪切矩形而不移动它?,c#,graphics,rectangles,C#,Graphics,Rectangles,我想问一下,是否有可能在不移动物体的情况下剪切物体。这是我正在做的代码 Matrix matrix = new Matrix(); matrix.Shear(2, 0); g.Transform = matrix ; g.DrawRectangle(Pens.Black, new Rectangle(200, 200, 100, 100)); g.ResetTransform(); 剪切系

我想问一下,是否有可能在不移动物体的情况下剪切物体。这是我正在做的代码

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

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

剪切系数与坐标系原点有关

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

  • 创建将应为静态的点移动到坐标系原点的平移。在本例中,静态点为(200300),因此平移为(-200,-300)
  • 应用翻译
  • 创建翻译的倒数。在示例中:(200300)
  • 应用反向翻译
  • 顺便说一句:确保
    处理矩阵和其他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();
    


    剪切因子与坐标系的原点有关

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

  • 创建将应为静态的点移动到坐标系原点的平移。在本例中,静态点为(200300),因此平移为(-200,-300)
  • 应用翻译
  • 创建翻译的倒数。在示例中:(200300)
  • 应用反向翻译
  • 顺便说一句:确保
    处理矩阵和其他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();
    


    这是您需要做的:

  • 将矩形的左下角平移到原点。 让偏移量为
    (-dX,-dY)
  • 应用剪切变换
  • 对矩形应用反向平移,即
    (dX,dY)

  • 这是您需要做的:

  • 将矩形的左下角平移到原点。 让偏移量为
    (-dX,-dY)
  • 应用剪切变换
  • 对矩形应用反向平移,即
    (dX,dY)

  • 我如何计算值来转换它?我无法让它工作。我将这些步骤添加到我的回答中。你可以用翻译创建一个翻译矩阵,因此,当你调用Invert时,它将被更改为反向翻译。正如我在示例中添加的那样,您也可以手工完成。我编辑了我的答案。矩阵需要按相反的顺序排列。。。初学者的错误:)Sorry我添加了一个稍微不同的实现,它使用Invert方法,我如何计算值来翻译它?我无法让它工作。我将这些步骤添加到我的回答中。你可以用翻译创建一个翻译矩阵,因此,当你调用Invert时,它将被更改为反向翻译。正如我在示例中添加的那样,您也可以手工完成。我编辑了我的答案。矩阵需要按相反的顺序排列。。。初学者的错误:)Sorry添加了一个稍微不同的实现,它使用Invert方法