我需要解釋一個SVG輸入數據並確定顯示的點。轉換矩陣中的M11和M21單元有什麼區別?
在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");
...在矩陣構造嘗試不同的值。
但是,似乎這些值對最終結果沒有影響。 new Matrix(,1 ,6,0,0);
新矩陣(,1 ,6,0,0); new Matrix(,1 ,6,0,0); (對於參數2和4同樣如此)
唯一重要的是這兩個(在本例中爲2)的總和。我認爲這是由於我的輸入數據有限以及給出其他輸入數據,可能會看到一些差異,這在某些視覺轉換中會有意義。
有人能幫我一下嗎?
至少這告訴我,縮放由M11和M22單元處理。儘管我仍然沒有看到我逃避的陷阱,但它解決了明顯的歧義。 – Tormod