Yazan : Şadi Evren ŞEKER

Bilgisayar grafiklerinde bir şeklin değşitirilmesi aşağıdaki işlemlere indirgenebilir:

Bu işlemlerin hepsi kendisine özgü masfuf (Matris) işlemleri olarak görülebilir. Örneğin taşıma işlemi 2 boyutlu kartezyen uzaydan (cartesian space) bir noktanın verilen x ve y değişimi kadar taşınması demektir.

Yukarıdaki şekilde verilen x,y değerlerine sahip nokta x’,y’ koordinatlarına taşınmıştır. Bu işlemi

x’= tx + x

y’= ty +y

şeklinde yazarsak tx,ty değerleri noktanın taşınma miktarı olarak düşünülebilir.

Bu taşıma işlemini homojen koordinat kullanarak yapmamız da mümkündür. Bunun için homojen koordinatlarda (homogenous coordinates) bir dönüşüm masfufu (transformation matrix) oluşturmamız gerekir.

Temel olarak dönüşüm matrislerindeki amaç noktaya çarpan olarak gelebilmesidir. Yani sonuçta

P’ = T x P

şeklinde bütün T dönüşüm matrislerini orjinal noktamız olan P ile çarparak P’ noktasını elde etmek isteriz.

Yukarıdaki taşıma işleminde bu durum toplama olarak yapılmaktadır. YAni

P’ = T + P

şeklinde formülize edilmiştir. Öyleyse yukarıdaki bu [tx,ty] matrisini homojen koordinatlara uygun hale getirmemiz gerekir.

tasima

Yukarıdaki bu taşıma matrisi, homojen koordinatlara sahip bir dönüşüm matrisi olarak görülmektedir. Yukarıdaki matrisi P noktası ile çarparsak elde edeceğimiz sonuç formülü de aslında toplama işlemidir.

Yukarıdaki bu işlemi

P’  = T x P

olarak formülize edip çarpacak olursak:

x= x +tx

y= y +ty

sonucuna varırız (klasik matris çarpıı ile)

Yukarıdaki taşıma işlemine benzer şekilde döndürme (Rotation) ve ölçekleme (scaling) işlemleri de matris çarpımı şeklinde yapılabilir. Örneğin döndürme işlemi için aşağıdaki matris çarpımda kullanılabilir:

dondurme

Yukarıdaki matris de bir önceki taşıma matrisine benzer şekilde çarpan olarak düşünülebilir ve

P’  = T x P

formülündeki T matrisi olarak düşünülebilir. Bu formülde ilgili işlemler yapılırsa

x= x cosθ – y sinθ

y= x sinθ + y cosθ

sonucu döndürme (rotation) konusunda anlattığımız şekilde beklentimiz doğrultusunda bulunmuş olunur.

Benzer şekilde ölçekleme matrisi olarak da

olcekleme

yukarıdaki matris kullanılabilir.

Örneğin yukarıdaki ölçekleme matrisi için

P’  = T x P

işlemini gerçekleştirecek olusak P’ matrisi için aşağıdaki sonuç çıkar:

x = sx . x

y = sy . y

Dolayısıyla beklentimiz doğrultusunda ölçekleme (scaling) konusunda anlattığımız dönüşüme uygun bir sonuç elde etmiş oluruz.

Yorumlar

  1. Caner

    Kullanıcıdan açı girdisi almıyorsanız pratikte sinus ve kosinüs neredeyse hiç kullanılmaz.
    Drag-Drop olayının başlangıç ve bitiş koordinatları orantılanıp, en-boy eğrisi alınır.

  2. Şadi Evren ŞEKER Article Author

    Bahsettiğiniz şekil dönüşümü nedir? Şayet boyutlandırma (scaling) veya taşıma işlemlerinden bahsediyorsanız, belirttiğiniz gib gerçekten de açı bilgisi alınmaz.
    Şayet döndürmeden (rotation) bahsediyorsanız bu durumda açı değeri kullanılır. Ancak verinin sizin bahsettiğiniz gibi noktasal olarak alınması durumunda (ki her zaman iki nokta olarak almayabilirsiniz, yani kullanıcı doğrudan bir açı da verebilir) yine açılar kullanılır. Fakat burada bir kısa yol ile sizin bahsettiğiniz kartezyen uzaydaki mesafe farkları ile eğim hesabı yapılır.
    Bu eğim zaten tanθ değerini verir ve bu değer yukarıdaki formülde olduğu gibi trigonometrik hesaplamalarda kullanılır.
    Kısaca bahsettiğiniz gibi trigonometrik değerleri dorğudan kodlamanıza gerek yoktur ancak aslında kullandığınız değerler yukarıda da anlatıldığı üzere döndürme miktarını veren açının trigonometrik fonksiyonlar ile hesaplanmış dönüşümüdür.

    Bu konuda hatırlanması gereken bir nokta da aslında döndürme işleminin kutupsal koordinat sisteminde yapılıyor olması ve yukarıdaki trigonometrik fonksiyonların amacının bu iki koordinat sistemi (kutupsal ve kartezyen uzaylar) arasında dönüşüm için kullanılıyor olmasıdır.

    Yorumunuz için teşekkürler

    başarılar

  3. perihan

    Hocam merhabalar , Özellikle sitenizden çok faydalandığımı belirtmek isterim.Benim anlamadığım konu şu ; bir dikdörtgen düşünelim bu dikdörtgenin hangi noktası için yukarıdaki işlemler yapılmaktadır.Yada yukarıdaki tanımlama şeklin tüm köşe noktaları için mi çalıştırılmaktadır.Yada şekli oluşturan tüm noktalaraımı uygulanır bu işlem ?

    Kolay gelsin hocam…

  4. Şadi Evren ŞEKER Article Author

    Evet şekil değişimi (transformation) işlemi hangi şekle uygulanıyorsa, o şeklin bütün noktalarına uygulanır. Bu işlem nokta nokta yapılabileceği gibi bir dönüşüm matrisi (transformation matrix) oluşturup bütün noktalara ve hatta uzaya uygulamak da mümkündür. Sıkça kullanılan java3d ve openGL kütüphanelerinde bu işlemi yerine getiren ve bütün uzaya dönüşüm matrisini uygulayan dolayısıyla o uzayda tanımlı bütün noktaları dönüştüre fonksiyonlar hazır olarak bulunmaktadır.

    Başarılar

  5. perihan

    Hocam öncelikle değerli zamanınızı ayırdığınız ve cevap verdiğiniz için teşekkürler. BU konularla ilgili Türkçe kaynak bulmak çok zor.Hocam yazdıklarınızdan;

    “Aslında örneğin rotation işleminde koordinat sistemi döndürülüyor” sonucu çıkarılabilir mi ?

    Kolay gelsin

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir