【问题标题】:What is the difference between M11 and M21 cells in a transformation Matrix?转换矩阵中的 M11 和 M21 细胞有什么区别?
【发布时间】:2015-01-02 20:12:16
【问题描述】:

我需要解释 SVG 输入数据并识别显示的点。

在 SVG 格式中,任何点都可以是可以应用转换(平移/旋转/缩放)的组(元素)的一部分。对于每个点,我需要冒泡并应用每个祖先的变换,以便找到该点在渲染中的位置。在阅读了有关该主题的一些网页(并试图从学校记住)之后,我了解到在 .NET 中执行此操作的常用方法是使用 3x3 数学矩阵,因此我尝试找出 System.Windows.Media.Matrix类。

我学习数学已经有一段时间了,我记不起这个具体细节了。

我在 LINQPad 中输入了以下代码:

var matrix = new Matrix(1,1,1,6,0,0);
var matrix2 = new Matrix(2,1,0,6,0,0);
var matrix3 = new Matrix(0,1,2,6,0,0);
var pts = new[]{
        new System.Windows.Point(0,0),
        new System.Windows.Point(1,1),
        new System.Windows.Point(2,2),
        new System.Windows.Point(3,3),
        new System.Windows.Point(4,4),
        new System.Windows.Point(5,5)
        }.ToArray();
pts.Select(org=>new{org,changed=matrix.Transform(org),changed2=matrix2.Transform(org),changed3=matrix3.Transform(org)}).Dump("Transformation Samples");

...并在 Matrix 构造函数中尝试不同的值。

但是,这些值似乎对最终结果没有影响。 新矩阵(1,1,1,6,0,0);
新矩阵(2,1,0,6,0,0); 新矩阵(0,1,2,6,0,0); (论点 2 和 4 也是如此)

似乎唯一重要的是两者的总和(在本例中为 2)。我认为这是由于我的输入数据有限,并且在给定其他输入数据的情况下,可以看到一些差异,这在某些视觉转换中是有意义的。

有人可以帮我吗?

【问题讨论】:

    标签: c#-4.0 matrix svg system.drawing


    【解决方案1】:

    也许 SVG 规范中关于变换矩阵如何工作的部分对您有用?

    http://www.w3.org/TR/SVG/coords.html#TransformMatrixDefined

    【讨论】:

    • 至少这告诉我缩放是由 M11 和 M22 单元处理的。虽然我仍然没有看到我回避的陷阱,但它解决了明显的歧义。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-20
    • 1970-01-01
    • 1970-01-01
    • 2020-07-11
    • 2012-10-11
    相关资源
    最近更新 更多