【问题标题】:System.Drawing.Matrix, I understand what it does, but how does it work?System.Drawing.Matrix,我了解它的作用,但它是如何工作的?
【发布时间】:2009-08-05 14:34:58
【问题描述】:

我已经使用了 Matrix 类一千次。我对矩阵数学有基本的了解,自从我上过这门课以来已经有好几年了。但我不完全理解这个类在后台做了什么来操纵 GraphicsPath 中的点。

具体来说,它在其中做什么,尤其是与 GraphicsPaths 相关?或者另一种看待它的方式,如果 Matrix 类不存在,而我必须创建自己的类,它会是什么样子,它会做什么? (我不是在创造我自己的,我只是想了解它)

另外,有人知道 Matrix 类中使用的矩阵的维度吗?

编辑:我已将其范围缩小到反射器中的以下调用。从那里,我得到了小吻。

[DllImport("gdiplus.dll", CharSet=CharSet.Unicode, SetLastError=true, ExactSpelling=true)]
internal static extern int GdipTransformPath(HandleRef path, HandleRef matrix);

【问题讨论】:

    标签: c# .net gdi+ matrix system.drawing


    【解决方案1】:

    在这种情况下,Matrix 类是一个二维变换矩阵。矩阵用于缩放、旋转和/或平移图形路径。数学相对简单。你可以在这里查看: http://en.wikipedia.org/wiki/Transformation_matrix

    【讨论】:

    • 那么矩阵的维度是多少?你认为它在做什么,乘法?伙计,我将不得不再次巩固我的线性几何。
    • 虽然下面tjoho的文章很有趣,但我强烈建议任何来这里寻找答案的人去看看;我认为这个答案有更多我正在寻找的基础知识。谢谢。
    【解决方案2】:

    如果您要创建自己的矩阵类来回转换为 System.Drawing.Matrix 类,需要注意的重要一点是 .NET 在转换点时不使用最常用的标准。

    .NET 矩阵似乎在转换发生之前就被转置了。

    也可以在这里阅读背景:http://www.codeproject.com/KB/recipes/psdotnetmatrix.aspx

    【讨论】:

    • 我不认为我会创建自己的,我只是想更好地了解里面到底发生了什么,所以我可以确定我正在使我的代码高效尽可能。
    • 哦,顺便说一句,这是一个非常酷的项目,我期待着深入研究它,看看它是如何工作的。
    【解决方案3】:

    基本上,GraphicsPath 是一组点和一个标志,这些标志解释了这些点如何相互关联。矩阵类只是将矩阵应用于这些点。

    你可以实现同样的事情: 1.新建一个空的GraphicsPath 2. 使用 GraphicsPathIterator,迭代路径(和子路径) 3.取每个点并应用矩阵 4. 将该点添加到新的 GraphicsPath

    但不要这样做。 GraphicsPath 中的类型没有很好的文档记录。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-11
      • 1970-01-01
      • 2014-01-27
      • 2014-05-27
      • 2015-04-15
      • 2018-09-23
      • 2022-07-13
      • 1970-01-01
      相关资源
      最近更新 更多