İKİ BOYUTLU DÖNÜŞÜMLER
Translation (Öteleme) y 6 5 4 3 2 1 ty tx x
Scaling (Ölçeklendirme) y 6 5 4 3 2 1 x
Rotation (Döndürme) y 6 5 4 3 2 1 x R α β
Rotation (Döndürme) y 6 5 4 3 2 1 x ? α β
Shear (Kaykılma) y 6 5 4 3 2 1 x
Matris Gösterimi ve Dönüşümler (1) Tüm dönüşüm formüllerini genel bir tek formüle dönüştürecek olursak aşağıdaki gibi ifade edebiliriz. Bu ifadeyi matris formunda yazarsak;
Matris Gösterimi ve Dönüşümler (2) Kare matrislerle çalışmak her zaman daha kolay olduğundan matrisimizi kare matris formuna genişletirsek tüm dönüşüm işlemlerimizi bu kare matrisi kullanarak gerçekleştirebiliriz.
Matris Gösterimi ve Dönüşümler (3) Translate Scale Rotate Shear
Bileşik Dönüşümler ? y x Birinci Aşama Döndürme yapmak istediğimiz 6 5 4 3 2 1 x Birinci Aşama Döndürme yapmak istediğimiz referans noktasını orjine taşırız (Translate(-4, -1)) Üçüncü Aşama Tekrar cismi eski konumuna öteliyoruz ( Translate(4,1) ) İkinci Aşama Alpha açısı kadar döndürme işlemi yapıyoruz (Rotate(α)) ? α β
Bileşik Dönüşümler Bileşik dönüşüm matrisleri her bir dönüşüm matrislerinin ard arda çarpılmasıyla elde edilir. Translate(4,1) Rotate(α) Translate(-4,-1)
3D Dönüşümler
Rotation
GDI+ ÖRNEK private void Form1_Paint(object sender, PaintEventArgs e) { Graphics g = e.Graphics; Pen p = new Pen(Color.Pink, 5); g.DrawRectangle(p, 50, 50, 100, 100); g.TranslateTransform(100, 100); g.RotateTransform(45); g.TranslateTransform(-100, -100); p.Color = Color.Blue; }
GDI+ ÖRNEK (2) private void Form1_Paint(object sender, PaintEventArgs e) { Graphics g = e.Graphics; Pen p = new Pen(Color.Pink, 5); g.DrawRectangle(p, 50, 50, 100, 100); Matrix transformMtrx = new Matrix(); transfromMtrx.Translate(50,50); transformMtrx.Scale(0.5f, 0.5f); transformMtrx.Rotate(45); transformMtrx.Translate(-50,-50); g.MultiplyTransform(transformMtrx); p.Color = Color.Blue; }
Java2D ÖRNEK public void paint(Graphics g){ Graphics2D g2d = (Graphics2D)g; Rectangle2D.Double rect = new Rectangle2D.Double(50,50,100,100); g2d.setColor(Color.PINK); BasicStroke bs = new BasicStroke(5); g2d.setStroke(bs); g2d.draw(rect); g2d.translate(100, 100); g2d.rotate(Math.PI/4); g2d.translate(-100,-100); g2d.setColor(Color.blue); }