Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu konu, 2B grafikler için matris dönüşümlerine matematiksel bir genel bakış sağlar. Ancak, Direct2D'de dönüşümleri kullanmak için matris matematiği bilmeniz gerekmez. Matematikle ilgileniyorsanız bu konuyu okuyun; aksi takdirde, bu konuyu atlayabilirsiniz.
- matrislere giriş
-
Affine Dönüşümleri
- Çeviri Dönüştürme
- Dönüştürme Ölçeklendirmeyi
- Kaynak Çevresinde Döndürme
- Rastgele Nokta Çevresinde Döndürme
- Dönüşüm dönüştürme
- Direct2D 'da Dönüşümleri Temsil
- sonraki
Matrislere Giriş
Matris, gerçek sayılardan oluşan dikdörtgen bir dizidir. Matrisin sırası satır ve sütun sayısıdır. Örneğin, matriste 3 satır ve 2 sütun varsa, sıra 3 × 2'dir. Matrisler genellikle köşeli ayraç içine alınmış matris öğeleriyle gösterilir:
Gösterimi: Matris büyük harfle belirlenir. Öğeler küçük harflerle belirlenir. Alt simgeler bir öğenin satır ve sütun numarasını gösterir. Örneğin,ij, A matrisinin i'th satırında ve j'th sütunundaki öğedir.
Aşağıdaki diyagramda, matrisin her hücresindeki tek tek öğelerle i × j matrisi gösterilmektedir.
i satırlarını ve j sütunlarını içeren bir matris 
Matris İşlemleri
Bu bölümde matrislerde tanımlanan temel işlemler açıklanmaktadır.
Ekleme. İki matrisin A + B toplamı, A ve B'nin karşılık gelen öğeleri eklenerek elde edilir:
- A + B = \[ a*ij* \] + \[ b*ij* \] = \[ a*ij* + b*ij* \]
Skaler çarpma. Bu işlem matrisi gerçek bir sayı ile çarpar. K gerçek bir sayı verildiğinde, skaler ürün kA, A'nın her öğesinin kile çarpılmasıyla elde edilir.
- kA = k\[ a*ij* \] = \[ k × a*ij* \]
matris çarpma . Sipariş (m × n) ve (n × p) içeren iki A ve B matrisi verildiğinde, C = A × B ürünü, aşağıdaki gibi tanımlanan sıralı bir matristir (m × p):
veya eşdeğer olarak:
- c*ij* = a*i*1 x b1*j* + a*i*2 x b2*j* + ... + a*in* + b*nj*
Diğer bir ifadeyle, her cijöğesini hesaplamak için aşağıdakileri yapın:
- A'nın i'nci satırını ve B'nin j'th sütununu alın.
- Satır ve sütundaki her öğe çiftini çarpın: ilk satır girdisini ilk sütun girişiyle, ikinci satır girdisini ikinci sütun girişiyle vb. çarpma.
- Sonucu toplama.
Burada bir (2 × 2) matrisinin (2 × 3) matrisle çarpılması örneği verilmiştir.
Matris çarpması değişmez değildir. Yani A × B ≠ B × A. Ayrıca tanımdan, her matris çiftinin çarpılmaması gerekir. Soldaki matristeki sütun sayısı, sağ taraftaki matristeki satır sayısına eşit olmalıdır. Aksi takdirde, × işleci tanımlanmaz.
Matristanımlayın. Kimlik matrisi, belirlenen I, aşağıdaki gibi tanımlanan bir kare matristir:
- I*ij* = 1 if *i* = *j* veya 0 aksi takdirde.
Başka bir deyişle, bir kimlik matrisi satır numarasının sütun numarasına eşit olduğu her öğe için 1 ve diğer tüm öğeler için sıfır içerir. Örneğin, 3 × 3 kimlik matrisi aşağıda verilmiştir.
kimlik matrisi 
Aşağıdaki eşitlikler herhangi bir matris M için ayrıdır.
- M x I = M I x M = M
Affine Dönüşümleri
bir benfin dönüşümü, bir koordinat alanını diğerine eşleyen matematiksel bir işlemdir. Başka bir deyişle, bir nokta kümesini başka bir nokta kümesiyle eşler. Affine dönüşümleri, bunları bilgisayar grafiklerinde kullanışlı hale getiren bazı özelliklere sahiptir.
- Affine dönüşümleri eş çizgililiği korur. Bir çizginin üzerine üç veya daha fazla nokta düşerse, dönüştürmeden sonra da bir çizgi oluştururlar. Düz çizgiler düz kalır.
- İki afin dönüşümünün bileşimi bir benfin dönüşümüdür.
2-B alan içinffine dönüşümleri aşağıdaki biçimdedir.
Daha önce verilen matris çarpımının tanımını uygularsanız, iki benfin dönüşümünün çarpımının başka bir benfin dönüşümü olduğunu gösterebilirsiniz. Bir 2B noktayı bir benfin dönüşümü kullanarak dönüştürmek için, nokta 1 × 3 matris olarak temsil edilir.
- P = \| x y 1 \|
İlk iki öğe noktanın x ve y koordinatlarını içerir. 1, matematiğin doğru şekilde çalışması için üçüncü öğeye yerleştirilir. Dönüşümü uygulamak için iki matrisi aşağıdaki gibi çarpın.
- P' = P × M
Bu, aşağıdakine kadar genişler.
nerede
- x' = ax + cy + e y' = bx + dy + f
Dönüştürülmüş noktayı almak için matris P'nin ilk iki öğesini alın.
- p = (x', y') = (ax + cy + e, bx + dy + f)
Not
1 × n matrisi, satır vektörolarak adlandırılır. Direct2D ve Direct3D'nin her ikisi de 2B veya 3B boşluktaki noktaları göstermek için satır vektörlerini kullanır. Bir sütun vektörü (n × 1) kullanarak ve dönüştürme matrisini dönüştürerek eşdeğer bir sonuç alabilirsiniz. Grafik metinlerinin çoğu sütun vektör formunu kullanır. Bu konu başlığında Direct2D ve Direct3D ile tutarlılık için satır vektörü formu yer alır.
Sonraki birkaç bölümde temel dönüşümler türetilir.
Çeviri Dönüşümü
Çeviri dönüştürme matrisi aşağıdaki forma sahiptir.
Çeviri dönüşümünü 
P bir noktayı bu denkleme takmak şu sonucu verir:
- P' = (*x* + *dx*, *y* + *dy*)
X ekseninde dx tarafından çevrilen noktaya (x, y) ve Y ekseninde dy karşılık gelir.
İki noktanın çevirisini gösteren bir diyagram 
Dönüştürmeyi Ölçeklendirme
Ölçeklendirme dönüştürme matrisi aşağıdaki forma sahiptir.
Ölçeklendirme dönüşümünü 
P bir noktayı bu denkleme takmak şu sonucu verir:
- P' = (*x* ∙ *dx*, *y* ∙ *dy*)
dx ve dytarafından ölçeklendirilmiş noktaya (x,y) karşılık gelir.
İki noktanın ölçeklendirildiğini gösteren bir diyagram 
Kaynak Çevresinde Döndürme
Kaynağın etrafındaki bir noktayı döndürmek için matris aşağıdaki forma sahiptir.
Dönüştürülen nokta:
- P' = (*x*cosΘ – ysinΘ, *x*sinΘ + *y*cosΘ)
İspat. P'nin bir döndürmeyi temsil ettiğini göstermek için aşağıdaki diyagramı göz önünde bulundurun.
Kaynağın etrafında döndürmeyi gösteren bir diyagram 
Verilen:
-
P = (x,y)
-
Dönüştürülecek özgün nokta.
-
Φ
-
Çizginin (0,0) P'ye kadar oluşturduğu açı.
-
Θ
-
Çıkış noktası hakkında döndürülecek açı (x,y).
-
P' = (x',y')
-
Dönüştürülen nokta.
-
R
-
Çizginin (0,0) P'ye uzunluğu. Ayrıca dönme çemberinin yarıçapı.
Not
Bu diyagramda pozitif y ekseninin işaret ettiği geometride kullanılan standart koordinat sistemi kullanılır. Direct2D, pozitif y ekseninin aşağı işaret ettiği Windows koordinat sistemini kullanır.
X ekseni ile çizgi (0,0) ile P' arasındaki açı Φ + Θ'dir. Aşağıdaki kimlikler şunlardır:
- x = R cosΦ y = R sinΦ x' = R cos(Φ + Θ) y' = R sin(Φ+ Θ)
Şimdi x' ve y' için Θ açısından çözün. Trigonometrik toplama formüllerine göre:
- x' = R(cosΦcosΘ – sinΦsinΘ) = RcosΦcosΘ – RsinΦsinΘ r( sinΦcosΘ + cosΦsinΘ) = RsinΦcosΘ + RcosΦsinΘ
Değiştirerek şunları elde ederiz:
- x' = xcosΘ – ysinΘ y' = xsinΘ + ycosΘ
daha önce gösterilen dönüştürülmüş P' noktasına karşılık gelir.
Rastgele Bir Nokta Etrafında Döndürme
Çıkış noktası (x,y) dışında bir nokta (x,y) etrafında döndürmek için aşağıdaki matris kullanılır.
Döndürme dönüşümünü 
Noktayı (x,y) çıkış noktası olarak alarak bu matrisi türetebilirsiniz.
Bir nokta etrafında döndürmeyi gösteren bir diyagram 
(x1, y1) noktanın (x,y) etrafında döndürülmesinin sonucu olan nokta (x,y) olsun. x1'i aşağıdaki gibi türetebiliriz.
- x1 = (x0 – x)cosΘ– (y0 – y)sinΘ + x x1 = x0cosΘ – y0sinΘ + \[ (1 – cosΘ) + ysinΘ \]
Şimdi daha önceki x1 = ax0 + cy0 + e formülünü kullanarak bu denklemi dönüşüm matrisine yeniden takın. y1'i türetmek için aynı yordamı kullanın.
Eğme Dönüşümü
Eğme dönüşümü dört parametreyle tanımlanır:
- Θ: X ekseni boyunca eğme miktarı, y ekseninden bir açı olarak ölçülür.
- Φ: X ekseninden bir açı olarak ölçülen y ekseni boyunca eğme miktarı.
- (px, py): Eğriltme işleminin gerçekleştirildiği noktanın x ve y koordinatları.
Eğriltme dönüşümü aşağıdaki matrisi kullanır.
Dönüştürülen nokta:
- P' = (*x* + *y*tanΘ – *py*tanΘ, *y* + *x*tanΦ) – *py*tanΦ
veya eşdeğeri:
- P' = (*x* + (*y* – *py*)tanΘ, *y* + (*x* – *px*)tanΦ)
Bu dönüşümün nasıl çalıştığını görmek için her bileşeni ayrı ayrı göz önünde bulundurun. Θ parametresi, x yönündeki her noktayı tanΘ değerine eşit bir miktarda taşır. Aşağıdaki diyagramda Θ ile x ekseni eğme arasındaki ilişki gösterilmektedir.
x ekseni boyunca eğmeyi gösteren 
Bir dikdörtgene uygulanan aynı eğme şu şekildedir:
Φ parametresi aynı etkiye sahiptir, ancak y ekseni boyunca:
Y ekseni boyunca eğmeyi gösteren diyagram 
Sonraki diyagramda dikdörtgene uygulanan y ekseni eğme gösterilmektedir.
Son olarak, px ve py parametreleri x ve y eksenleri boyunca eğriltme için orta noktayı kaydırır.
Direct2D'de Dönüşümleri Temsil Etme
Tüm Direct2D dönüşümleri, afin dönüşümleridir. Direct2D, benfin olmayan dönüşümleri desteklemez. Dönüşümler D2D1_MATRIX_3X2_F yapısıyla temsil edilir. Bu yapı 3 × 2 matris tanımlar. Bir benfin dönüşümünün üçüncü sütunu her zaman aynı olduğundan ([0, 0, 1]) ve Direct2D benfin olmayan dönüşümleri desteklemediğinden, 3 × 3 matrisinin tamamını belirtmeye gerek yoktur. Direct2D, dönüşümleri hesaplamak için dahili olarak 3 × 3 matris kullanır.
D2D1_MATRIX_3X2_F üyeleri dizin konumlarına göre adlandırılır: _11 üyesi öğedir (1,1), _12 üye öğesidir (1,2) vb. Yapı üyelerini doğrudan başlatabilmenize rağmen, D2D1::Matrix3x2F sınıfını kullanmanız önerilir. Bu sınıf D2D1_MATRIX_3X2_F devralır ve temel afin dönüşümlerinden herhangi birini oluşturmak için yardımcı yöntemler sağlar. sınıfı, Direct2D 'da Dönüşümleri Uygulamaaçıklandığı gibi, iki veya daha fazla dönüşüm oluşturmak için işleci*() tanımlar.
Önümüzdeki