【发布时间】: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