Koordinat Sistemleri ve Farklı Uzaylar Arası Geçiş
Bu yazımda size koordinat sistemlerini ve bu sistemlerde yapılacak işlemleri anlatacağım. Karmaşık vektörel işlemlere girmeden vektörlerden, konumuzla ilgisi olan işlemlerden bahsedeceğim.
Koordinat sistemleri:
Koordinat sistemleri, uzaydaki noktaların belirli bir pozisyona göre bağıl konumlarının bilinmesini sağlayan sistemlerdir. Bağıllığı kısaca anlatmak gerekirse;
Örneğin Şekil 1 deki koordinat sistemilerinden, A sistemindeki Z = (5,8) noktası, kabul edilen (0,0) merkez noktasına göre (5,8) koordinatlarda bulunmaktadır. A sisteminin 30 derece kadar, saat yönünün aksi döndürülmesi ile elde edilen B sisteminde ise aynı nokta Z’ = (8.3301,4.4281) şeklinde yer göstermektedir. İki koordinat sistemi arasındaki ilişkiyi bilebilirsek bir koordinat sisteminden diğer koordinat sistemine geçişide Transformasyon işlemleri ile gerçekleştirebiliriz.

Şekil 1 – A ve B orthonormal koordinat sistemleri, A sistemi kartezyen koordinat sistemidir
Vektörler:
Vektörler uzayda bir yönü ve büyüklüğü olan matematiksel objelerdir.
= (x0, x1, x2 .... xn) şeklinde gösterilirler ve çok boyutlu olabilirler. Bilgisayar grafiklerinde 2 ve 3 boyutlu vektörler kullanılır. Uzayda nereye taşınırlarsa taşınsınlar büyüklükleri ve yönleri değişmez. Dolayısıyla, noktaların aksine konumdan bağımsızdırlar. ( Şu an için bunun kafanızı karıştırmasına izin vermeyin. Daha sonra bu bilginin nasıl kullanılacağını anlatacağım )
Grafik programlamada kullanılan koordinat sistemleri genel olarak birbirine dik yani orthogonal birim vektörlerle tanımlanırlar ve bu sistemlere othonormal sistemler adı verilir. Vektörlerin dik olması, bir noktaya ait koordinatların birbirinden bağımsız işlenebilnesini sağlar. Biribirine dik vektörlerin birbirleri üzerindeki izdüşümleri 0 birimdir.
Şekil 2 - Vektörler
Kartezyen koordinat sistemi:
Kartezyen koordinat sistemi
= (1, 0) ve
= (0, 1) uzunluğu bir birim olan ve birbirine dik baz vektörleri ile tanımlanır. Baz vektörler bir koordinat sisteminde herhangi bir vektörü ifade etmede kullanılırlar. Örneğin kartezyen koordinat sisteminde tanımlı vektör
= (3,4) ise bu vektörü
şeklinde gösterebiliriz.
Şekil 3- Kartezyen koordinat sistemi
Kartezyen koordinat sisteminini oluşturan
,
vektörleri birbirine diktir. Şimdi bu söylediğimizi aşağıdaki bilgileri kullanarak ıspatlayalım
Vektör normalizasyonu :
Vektör normalizasyonu vektör uzunluğunun 1 birime indirgenmesi için kullanılır. Bunun için vektöre ait tüm bileşenler vektör uzunluğuna bölünür.
vektörüne ait vektör uzunluğu ||
|| şeklinde gösterilir.
= (x0, x1, x2 .... xn) şeklinde bir vektörse:
||
|| =
=
/ ||
|| şeklinde normal vektör bulunur.
Ör :
= (3,4) olsun. Bu durumda ||
|| =
= 5 olarak elde edilir.
= (3/5,4/5) = (0.6,0.8) olarak elde edilir. (
= 1 olduğuna dikkat edelim )
Vektörlerin Skalar Çarpımı (Dot Product)
Orthonormal bir sistemde, iki vektör arasında tanımlanan bir işlemdir Matematikte (.) işareti ile gösterilir.
veya
= (x1, y1,.......) ,
= (x2,y2,.......) ise
=(x1 *x2 + y1 *y2 + ...... ) şeklinde hesaplanır.
,ise burada iki normalize edilmiş vektör arasındaki skalar çapım işleminin aralarındaki açının cosinüs’üne eşit olduğunu görebilirsiniz.
Skalar çarpım kullanılarak, vektörlerin birbiri üzerlerindeki izdüşümlerini bulabiliriz.

Şekil 4 –
vektörünün
vektörü üzerindeki iz düşümü
Şekil 4’de görüldüğü üzere, elde ettiğimiz cosinüs değeri ile
vektörünün
vektörü üzerindeki iz düşümünü (
) bulabiliriz.
İzdüşüm uzunluğu
ile bulunur.
İzdüşüm vektörü de izdüşüm vektörü uzunluğunun
vektörünün normalize edilmiş yani
=
/ ||
|| ile aşağıdaki gibi çarpılması ile elde edilir.
Not: Vektör uzunluğunun bulunmasını =
işlemleri şeklinde yapabiliriz.
Bu bilgilerden yola çıkarak sırayla kartezyen koordinat sisteminin baz vektörlerine ait bilginin doğruluğunu yani, dik olma durumlarını ve birbirileri üzerindeki izdüşümlerinin 0 olmasını inceleyelim.
= (1, 0) -> ||
|| =
= 1 ( vektör 1 birim uzunluğundadır )
= (0, 1) -> ||
|| =
= 1 ( vektör 1 birim uzunluğundadır )
= ( 1 * 0 + 0 * 1 ) = 0 ( Cos(90)’ın 0 olduğunu hatırlayalım )
Dolayısıyla iki vektörün birbirine dik olduğunu bu şekilde anlayabiliriz.
vektörünün,
vektörü üzerindeki izdüşüm uzunluğunu da =
şeklinde bulabiliriz. Dolayısla yukarıda orthonormal koordinat sistemleri ile ilgili belirtmiş olduğumuz unsurları ispatlamış oluruz.
Koordinat eksenlerinin baz vektörler cinsinden gösterilmesi:
Koordinat eksenleri onu oluşturan baz vektörlerle tanımlanırlar. Bunu bir matrisle gösterebiliriz. Aşağıda kartezyen koordinat sisteminin matris gösterimini görebilirsiniz. Her bir satırda bu sistemi oluşturan vektörler vardır (Bu durum OpenGl ve DirectX te farklıdır, ancak ben anlatımımda transformasyon matrislerini bu şekilde ve vektörleri, noktaları kolon şeklinde göstereceğim ).

Farklı uzaylar arasında geçiş yapılması:
Farklı uzaylar arasında örneğin model uzayı, kamera uzayı vb sistemler arasında dönüşüm yapmak istenirse bir sistemden diğer sisteme dönüşümler yapılması gerekir.
Örneğin elimizde bir kitap olsun, bir masanın sağ kenarında dursun, bu masa da bir odada televizyonun kenarında dursun .
Kitabın üzerine ve tam ortasına bir sinek konsun, ve sineğin yerini soralım.
1) Sadece kitabı gören bir kişi kitabın ortasında diyecek.
2) Kitabı ve masayı gören bir kişi, “masanın kenarında, kitabın ortasında” diyecek ancak bunu kitabı hiç görmeden “Masanın kenarında” şeklinde de söyleyebilir.
3) Odaya yeni giren birisi şöyle diyebilir, televizyonun kenarındaki masanın kenarındaki kitabın, ortasında. Ancak sadece şöylede diyebilir. Televizyonun yanında.
Dolayısıyla buradan görüyoruz ki, her durumun kendisine göre bir bağıllığı vardır. Bağıllıkların biribirlerine göre durumlarını da bilirsek birinden diğerine geçebiliriz.
Şimdi kartezyen koordinat sisteminde biribirine dik iki adet baz vektör bulalım ve bunları bir sistem olarak kabul edip, kartezyen koordinat sistemindeki bir noktanın bu sistemdeki karşılığını elde edelim.

Şekil 5 – Eksenlerin döndürülmesi
Şekil 3’deki sistemde kartezyen koordinat sisteminin baz vektörleri
olsun (Şekil 1 deki A sistemine ait baz vektörler), yeni sisteminde baz vektörleri
olsun (Şekil 1 deki B sistemine ait baz vektörler). Matematiksel olarak yeni sistemin baz vektörleri aşağıdaki gibi bulunur. Daha sonraki yazılarda anlatacağım gibi aslında bu rotasyon matrisidir.

Hesaplama sonucu yukarıdaki gibi bir sonuç elde edilir.
Şimdi bu sonucu sistemi matrisler ve vektörler cinsinden ifade edelim. Bu sistem kartezyen koordinat sistemindeki bir noktayı yeni koordinat sisteminde tanımlar.

Skalar, yani sayısal olarak da

Bu yeni sistemin ortogonalliğini de aşağıdaki gibi sorgulayalım.
= (
,
) -> ||
|| =
= 1
= (
,
) -> ||
|| =
= 1
= 0 ( Cos(90) )
Örnek olarakta Z = (5,8) noktasını şekil 1 deki A kartezyen koordinat sisteminden B sistemine geçirelim.

Z’ = (8.3301,4.4281) olarak elde edilmiştir.
Şu ana kadar Şekil 1 deki A ve B sistemleri arasındaki tek fark döndürme etkisi idi. Ancak şimdi rotasyona bir de öteleme ekleyelim. B sistemi artık A sisteminin 30 derece döndürülmüş ve (2,3) kadar ötelenmiş hali şeklindedir.

Şekil 6 – Eksenlerin döndürülmesi ve ötelenmesi
Bu durumda yapılacak işlem son derece basittir. B sistemi hiç döndürülmeseydi A sistemindeki Z(5,8) noktası B sisteminde nerede olacaktı ?
Cevap şöyledir:
Z’’ = Z – O ( Z orjinal noktamız burada (5,8), O yani (2,3) kadar ötelenmiş sistemin koordinat merkezi )

Daha sonra da bu noktayı 30 derece kadar döndürelim.

Böylece Z’ noktasını yeni sistemdeki pozisyonunu elde etmiş oluruz.
Homojen koordinat sistemleri:
Şu ana kadar homogen koordinat sisteminden bahsetmedim. Bu koordinat sistemlerinin özelliği transformasyon işlemlerini homojen hale getirebilmesidir. Az önce yukarıda yaptığım yer değiştirme ve rotasyon işlemlerini tek bir matrisle ifade edebilmemize olanak verir. Örneğin yukarıdaki işlemi şu şekilde yazabilirdik:


Gördüğünüz gibi (Rotasyon * Öteleme) matrisini tek bir 3x3 lük matris halinde çarpıp saklayabiliriz. 2 boyutlu sistemlerde 3x3 matrisler, 3 boyutlu bir sistemde de 4x4 matrisler kullanılır. Bu matrsilerle transformasyonlar ve projeksiyonlar gerçekleştirilir. Vektörlerin boyutu da bir artar.
Size daha önce noktalar ve vektörler arasında, bir takım farklılıklardan bahsetmiştim. Noktalar ötelemeden etkilenirken, vektörler etkilenmezler. Yukarıdaki matris işleminde Z =
noktasını ,
şeklinde ifade edersek vektör olacağını, herhangi bir öteleme işleminden etkilenmeyeceğini görebilirsiniz. Bu yüzden homojen koordinatlarda vektöre eklenen ek koordinat noktalarda 1 olurken vektörlerde 0 olur.
Döküman boyunca kolon vektörler kullanacağımı belirtmiştim. DirectX kolon vektörleri (column-major) benimserken, OpenGL satır vektörleri (row-major) tercih etmiştir. OpenGL deki gibi satır vektörleri tercih edersek, bu durumda öteleme matrisinde öteleme değerlerine ait matris
şeklinde olur. Rotasyon matrisi de
şeklinde olur. Yani aşağıdaki şekle gelir.

Matrix transpozisyonu
Yukarıdaki başlıkta
ifadesinde, matris transpozisyonu işlemi vardır. Matris transpozisyonu
gibi bir matrisi
j için aij = aji } haline getirir. M matris
şekline gelir.
3. Boyut:
Verdiğim bilgiler ışığında, 3. Boyutla ilgili işlemler benzer şekillerde yapılmaktadır. Bu durumda homojen sistemdeki eksenlerin rotasyonu ve ötelenmesi üç boyutta yapılmaktadır. Dolayısıla matrisler 4x4 olmaktadır.
Vermek istediğim bir diğer ayrıntı da bilgisayar grafiklerinde sıkça karşılaşabileceğiniz bir durumdur. DirectX ve OpenGL standart olarak belli bir kuralı seçmiş ve matrislerini buna göre düzenlemiştir. DirectX te sol el kuralı, OpenGL de ise sağ el kuralı standart olarak uygulanmaktadır. Sol el kuralında pozitif Z ekseni ekrandan içeri doğru iken bu durum OpenGL de ekrandan size doğrudur. Bu durumu şimdilik çok detaylandırmayacağım ancak her iki sistemi de, her iki kütüphanede kullanmanız mümkündür. Vektörlerde ve matrislerde basit işlemlerle her iki sistem arasında geçiş sağlanabilmektedir.

Şekil 7 – Sağ el ve sol el kuralları (DirectX C++ Dökümentasyonu)
Notlarım:
GPU ( grafik işlemcileri ) yukarıda vermiş olduğum skalar çarpım, normalizasyon işlemlerinin hepsi için donanımsal komutlar içermektedir. Bu komutlar (dp3, dp4, norm) komutlarıdır.
Verdiğim bilgiler doğrultusunda kendinize göre denemeler yaparsanız, konuları daha iyi anlama fırsatı bulursunuz.
Bir sonraki yazımda, transformasyonları anlatacağım.
Ahmet Bilgili