Gönderen Konu: Temel Geometri  (Okunma sayısı 50599 defa)

Temel Geometri

« : 02.10.2005 02:41:22 »
Hızlı düğmeleri aç

anesthetic

İleti: 403

Çevrimdışı
  • ****
  • Sr. Member
    • Profili Görüntüle
    • http://resident.tr-demoscene.info/
3D ile uğraşmak isteyenler için başlangıç niteliğinde bir tutorial hazırlayayım istedim. Normalde bunu Antika için düşünüyordum ama burada da bulunsun hem Antika'nın ilk sayısı çıkana kadar anca bitmiş olur sanırım. Gerçi konu ile ilgili Sensei'nin, benim de zamanında işime yarayan "1D Uzay" yazısı var ama biraz daha geniş tutacağım hadiseyi.

Bu bi 3D grafik tutorialı olmayacak. Bu işin sadece uzay kısmını irdeleyeceğim. Dolayısıyla içerisinde kod örnekleri sunmama gerek yok. Zaten mesela matris çarpımını filan hangi dilde yazdığınız önemli olmayacak (teorik açıdan).

Daha önce bi software 3D kütüphanesi yazmıştım ama çok çok çok dandik fill algoritmam yüzünden sadece çizgi ve noktalarla uğraştım. Sonra OpenGL'e başlayınca fazla üzerine gitmedim. Ama OpenGL bile kullanıyor olsanız bir süre sonre glRotatef yahut glTranslatef'i filan geride bırakmak isteyeceksiniz. Tamam matris nedir bilmeden bi iki şey döndürebiliyoruz. Ama misal çeşitli kısımları çeşitli matris işlemlerine maruz kalmış büyük bir obje grubunu tek array'de nasıl tutacaksınız? Yani objenin bi kısmını OpenGL'e matrislerle çarptırıp ekrana bastınız mesela. Ama hangi uzay koordinatlarına yahut hangi piksele basıldığını bilmek istemez miydiniz? Bunları ezberden değil de anlayarak yapmak için olaylar nasıl gelişiyor bilmeniz lazım.

Şimdilik şu konuları ele alıcam. Daha ilerisine gitmek için biraz daha çalışmam lazım :)

- Geometri
- Vektör ve Uzay
- Kartezyen Sistem
- Üçüncü Boyut ve Devamı
- Neden Matrisler?
- Vektör Matrisleri
- Uzay Matrisleri
- Öteleme (Translation)
- Döndürme (Rotation)
- Boyutlandırma (Scaling)
- Daha Acayip Çevrimler
- Kartezyen Kamera (LookAt)

Kendinizi sıfır hissediyor yahut temelleri pekiştirmek istiyorsanız baştan dalın direk. Eğer geometri bilginiz fena değilse ama "Bu işleri matrislerle yapıyolar olm dedi geçen arkadaş, şaşırdım." diyorsanız. 'Neden Matrisler?'den başlayın. Yok eğer ben anladım bu matrisleri ama bi türlü kamera yazamadım diyorsanız da... Nerden başlayacağınızı biliyorsunuz.

Daha sonra ek olarak kısaca bazı matris işlemleri OpenGL'de nasıl yapılıyor ondan bahsederim. Ama o kısma kadar ne için kullandığınızı göz ardı edicem.

Son bir not da: Tutoriallar içinde italik yaptığım yazıları atlayabilirsiniz. Bunlar konunun yüzeyinden biraz uzaklaşan ve çok da gerekli olmayan bir takım açıklamalar olacaktır.

İlk yazı olarak 'Geometri'ye başlayabiliriz. Konuyu azıcık bilseniz bile bu yazı çok basit gelecektir. Ama tutarlılık açısından en temel kavramları vermem gerek diye düşünüyorum. Bi de çok matematik olmuş diyorsanız anlarım, tutorialın tamamı matematik olacak. Programlaması size kalmış.

Yazılar hakkında öneri, düzeltme, eleştiri ne varsa söylemekten çekinmeyin. Sonuçta ben de bu işin gurusu değilim. Daha bir çok şeyi idrak etme aşamasındayım. Tutorialı yazmamın bi sebebi de bu aşamayı hızlandırmak zaten.

Temel Geometri

« Yanıtla #1 : 02.10.2005 02:43:10 »
Hızlı düğmeleri aç

anesthetic

İleti: 403

Çevrimdışı
  • ****
  • Sr. Member
    • Profili Görüntüle
    • http://resident.tr-demoscene.info/
GEOMETRİ

Geometri, Bir Diğer Gudik Matematik Dalı

Öncelikle geometri deyince ne aklımıza geliyo? Doğrular, üçgenler, küpler filan. Matematiğin temel görsel alanı diyebiliriz. Örneğin 3 sayısı bir değer ama 'üçgen' dediğimiz vakit bir şekili ifade ediyoruz. Geometri kulanarak üçgenin bazı özelliklerini inceliyoruz. Üçgenin iç açıları toplamı 180 derece gibi mesela. Benzer şekilde 3 sayısının özelliklerini de aritmetikte görüyoruz. 3 asaldır gibi.

Şimdi bildiğimiz gibi bu üç sayısı doğal sayılar kümesinin bir elemanı. Doğal sayıların tüm elemanları reel sayıların elemanları olduğu için 3 aynı zamanda reel sayılar kümesinin de bir elemanı. Yani 2, 3, 3 buçuk gibi sayıları birer eleman gibi düşünüyoruz. Bu elemanlar çeşitli kümelere ait, bu kümeler birbirlerinin alt-üst kümeleri vs vs. Misal 2 çift sayılar kümesinin elemanı. Çift sayılar kümesi de rasyonel sayılar kümesinin alt kümesi vs.. vs..

Bunlar aslında temelde oldukça hardcore mevzular (kümeler filan) ama ilk bakışta neden bahsedildiğini anlaması oldukça kolay ilkeler. Küme deyince şaşırıp kalmıyorsanız teknik bir çok konuyu anlama şansınız yüksek.

Şimdi geometrik cisimleri (Doğru, nokta, kare vb...) bunun gibi benzer bir sistematiğe sokalım.

Geometride Kümeler

Reel sayılar kümesi, doğal sayılar kümesi gibi kümelerin ortak özelliği nedir, sayı kümeleri olmaları. Bu sayı kümeleri birbirleri içine geçmişler; alt kümeler, üst kümeler, kesişimler vs. gidiyor böyle. Ama hepsinin elemanları o en küçük birim olan sayılar. Aritmetikte sayılardan başka elemanlar tanımlı değil. Onlar aritmetiğin biricik, ufacık çocukları.

Şimdi geometride de böyle bi sistem kurmuş dedelerimiz. Demişler ki geometride biricik elemanım benim 'nokta' olsun. Diğer tüm geometrik cisimler bu noktaları içeren kümeler olsun.

Şimdi niye böyle tanımlamışlar diye sormayın, anlaması basit olsun diye işte. Siz elemanları küp olarak da tanımlayabilirdiniz. Bu sayede cisimleriniz voxel grupları olurdu. Uzaklıklarınız Planck uzaklığı gibi paketli olurdu. Ama düzlem yahut doğru gibi kavramlar bu sistemin dışında kalırdı. Yahut noktayı küme olarak tanımlayıp elemanları kendiniz belirlerdiniz. Bu sayede geometrinin uğraşmadığı mikro uzayları kapsardınız. Nasıl tanımlandığı matematiksel kural değil. Bunların hepsi kurgulanmış sistemler, matematiğin kendisi ise sistem kurgulama ve bu sistemlerin tutarlılığıyla ilgilenir. (Belki de sistemleri eleman olarak ele alan kurgulanmış bir metasistemdir!) Yani analojiyle anlatırsak: Geometri, Cebir, Aritmetik filan çeşitli programlarsa, matematik bir programlama dilidir. Flexi belki beni dövebilir :) ama ben böyle düşünüyorum. Oha, konudan bu kadar uzaklaşamazdık!)

Nerde kalmıştık. Ha, nokta (eleman) ve cisimler (küme). Şimdi elimizde bi üçgen var mesela. Bu üçgen, içinde bissürü nokta adlı elemandan barındıran bir küme. Bu üçgenin bir üst kümesi ise üçgenin üzerinde durduğu düzlem. Aynı noktalar bu düzlemin de elemanı.

Eğer noktalar ve cisimler kavramı ile sayılar ve sayı kümeleri kavramı arasında birebir ilişki yerleştiyse şimdi başka bi kademeye geçebiliriz. Bu noktaları bi şekilde sayılar gibi etiketlemeliyiz, bunun için 'Vektör ve Uzay'ları kullanacağız.

Temel Geometri

« Yanıtla #2 : 02.10.2005 02:51:27 »
Hızlı düğmeleri aç

anesthetic

İleti: 403

Çevrimdışı
  • ****
  • Sr. Member
    • Profili Görüntüle
    • http://resident.tr-demoscene.info/
VEKTÖR VE UZAY

Pozisyon

Şimdi sayıların hepsi aritmetikte birer eleman. Bu elemanları birbirinden ayıran (2'yi 3'ten ayıran şey mesela) bu sayıların 'miktar'ları. Bu elemanların hangi kümelerde olduğunu ya da hangi kümelerde olmadığını belirleyen şey bu miktar hadisesi. Eğer sayılara ait miktarlar olmasaydı onları büyüktür, küçüktür gibi karşılaştıramazdık. Yahut "Bu sayı böyledir, o sayı şöyledir." gibi bir takım etiketler yapıştırıp onları kümelere sokamazdık. Hepsi birbirinin aynı olurdu.

Geometrideki noktaları da birbirinden ayıran şeyin adı 'pozisyon'. Yani cisimler içinde nerelerde bulundukları. Bu pozisyon hadisesi yukarı, aşağı, uzak, yakın, dış, iç gibi tamamen sindirmesi kolay şeylerdir. Misal bir topun yüzeyini bir 'top kümesi' olarak tanımladım diyelim. Topu da kapsayan 3 boyutlu bir uzayda (boyut nerden çıktı daha) topun içi ve dışı dediğim vakit oralarda bulunan noktaları ifade etmiş olurum. Topun içi kümesi ile topun dışı kümesinin birbirinden ayıran şey bu iki kümenin elemanlarının topa göre pozisyonlarıdır.

(Noktalara pozisyondan başka, miktar yahut yön gibi başka özellikler de eklenebilir, alanlarda olduğu gibi. Ama olayı basit tutmak için sadece pozisyondan bahsetmek yeterli. Kompleks sayılarda da mesela iki tane miktar bulunur, bu da onun gibi.)

Şimdi sayılarda her şey güzel. İnsan denen şahane canlı öyle iki sayı tanımlamış ki, diğer tüm sayıların miktarını bu iki sayı cinsinden yazabilmiş. Bu iki sayı 0 (hiçlik) ve 1 (teklik). Diğer tüm sayıların miktarı bu iki sayı cinsinden tanımlı.

Bu tanımı dille ifade etmesi zor çünkü rekursif bi tanım. Dilim şöyle dönüyor:
0'ın miktarı hiçliktir.
1'in miktarı tekliktir.
Bir sayının miktarı ile 0 arasındaki ilişkinin, 1 ile 0 arasındaki ilişkiye oranı; yine o sayının miktarıdır.


Geometrideki pozisyonun da böyle bir tanımı vardır. Sayılar için hiçlik ve teklik kavramları yetmişti. Ama noktalar için iki şeye ihtiyacımız var. Bir adet referans noktası ve biraz vektör. Geri kalan tüm noktaların pozisyonlarını bunların cinsinden tanımlayabiliriz. Bu şeylerle tanımlanan tüm noktalara da geometrik 'uzay' adını verdim gitti (şimdilik).

Şimdi 'biraz vektör' deyince çok karışık oldu. Daha vektör nedir ondan bahsetmedik. Biraz derken kastım burada tam sayı adetinde olsun (fractal kasmayalım).

En basit durum 0 adet vektör olacaktır. Bu durumda elimde sadece bir adet referans noktası var. Bu noktanın edebi ismi 'merkez (orijin)'. Geri kalan tüm noktaları bu merkeze göre tanımlayacağım.

Şimdi yaslanıp düşünün, böyle tanımlanabilecek sadece bir nokta olabilir. Size sadece bir kavram veriyorum, geriye kalan tüm kavramlar bundan çıkar diyorum. Felsefi olarak bu, geride başka kavram yok demektir. Halbuki sayılarda mesela hiçlik ve teklik diye iki kavram verdim. Bu iki kavramın ilişkisinden bissürü sayı üretebiliriz. Ama tek bi merkez verirsem başka bi şey çıkmaz ki ortaya, çünkü bahsedilecek bi ilişki yok!

İşte bu özel durumla tanımlanan tüm noktaların (sadece merkezin yani) kümesine '0D uzayı' adını veriyoruz. 0 sayısı 0 adet vektör kullanmamızdan ötürü geliyor. Kağıt üzerinde bu uzayı şöyle gösterebiliriz:
Kod: [Seç]
   .
  merkez
Ne kadar şirin di mi? Tek elemanlı bi uzay. Sahip olabileceğimiz en küçük uzaylardan biri. Ama çok önemli bi uzay çünkü içinde merkez var.

Şimdi bu kadarı tabi ki yeterli değil. Devamını nası getiricez? Buraya kadar hep aritmetik sistemindeki kavramları kullanarak geometrik kavramları inşa ettik, aynısını yapmaya devam edelim.

Analitik

Şimdi yeni bir uzay tanımlayalım. Bu uzayda da yine özel tanımlı merkez olsun. Sayılarda nasıl 0 hiçliği temsil ediyorsa, merkez de uzayda ortada olmayı, merkezliği temsil edecek. Şimdi bi özel nokta daha tanımlayalım. Bunun adına 'birim pozisyon' adını verelim. Birim pozisyonun merkezin neresinde olduğundan henüz bahsetmiyoruz. Birim pozisyon, yeni uzayımızın her yerinde olabilir. Henüz uzaklık, yön gibi kavramları tanımlamadık o yüzden neresi gönlünüzden geçiyorsa 'birim pozisyon'u orası belirleyin.

Bu yeni uzayımızdaki merkez noktasına (0), birim pozisyona da (1) adını verelim. Parantez kullanmamızın sebebi sayılardan değil noktalardan bahsettiğimizi anlamak. Bundan başka tanımlayacağımız her sayı bu iki sayının tanımını kullanacak. (Yine aynı rekursif tanım)

Artık özel tanımlı iki noktamız var. Bu iki nokta arasındaki ilişkiden sonsuz tane daha nokta oluşturabiliriz! Ama o kadar noktaya tek tek isim mi vericez? Hayır bunun için 'analitik geometri' hadisesini kullanacağız. Bizden önce aritmetik denen güzide sistem kurulmuş, bundan faydalanarak noktaların pozisyonlarını sayıların miktarları ile adlandıracağız. Analitik geometri de basitçe söylersek, geometri ile aritmetik arasındaki bu ilişki. (Aslında analitik geometriye, cebirle geometri arasındaki ilişki demek daha doğru olur.)

Misal bi üçgen çizdik deftere. Bu Üçgen orda sadece geometrik bir cisimdir. Ama üçgenin köşelerine reel sayıları kullanarak isim verirsek geometrimiz biraz daha 'analitik'leşir.

Analitik olarak (3) dediğimizde mesela, (0) ve (1) noktalarına göre belirttiğimiz nokta, Aritmetikte 3'ün 0 ve 1'e göre bulunduğu nokta olacak. Aynı şekilde (2.5), (pi) noktalarını filan da tanımlayabiliriz. Eğer bu eşleştirmede sayılardan kullanacağımız en büyük küme reel sayılar kümesiyse bu uzaya '1D uzay' adını veriyoruz. (Kompleks sayıları karıştırma.)

Peki Ya Vektörler?

Şimdi bu uzaya 1D uzay demiştik. Dolayısıyla bu uzayın tanımında bir adet vektör kullanmamız gerek. Burda kullandığımız (0) ile (1) arasındaki ilişki [1] vektörü olsun. Bu ilişki de nedir? (1)'in (0)'a göre 'yön'ü ve (1)'in (0)'dan uzaklığıdır. Yani vektör dediğimiz şey iki kavram belirtmektedir yön ve uzaklık.

Bu sayede noktaların sahip olduğu pozisyon isimli özelliklerini, yön ve uzaklık olarak ikiye bölmüş oluruz. Yani bir noktanın (0)'a göre pozisyonuna aynı zamanda; (0)'a göre olan yönünde, (0)'a uzaklığı kadar ilerlersek de ulaşırız. Tabi burada yön ve uzaklık derken referans alacağımız şeyler (1)'in yönü ve uzaklığı yani [1] vektörüdür.

Şimdi, ne demiştik hatırlayalım. Noktaların pozisyonlarını tanımlamak için bir adet merkez noktasına ve bir kaç vektöre ihtiyacımız var. Burada 1D uzaydan bahsettiğimize göre bir adet vektörümüz olacak. O da [1] vektörü. ([1]'e aynı zamanda 'i' adı da verilir.)

Şimdi elimizdeki şeyler (0) ve i. Bu ikisi bana bir 1D uzay verir. Bu uzaydaki diğer tüm noktalar (0) ve i cinsinden tanımlanır. Misal (0)'dan i yönüne dönüp, i'nin boyunun 7 katı kadar ilerlesem (7) noktasına gelirim. Bu yüzden (7) noktası (0) dan i yönünde 7 adet i boyu kadar uzaktaki nokta olarak tanımlıdır. Yani :

(7) = (0) + 7i

Burada 7i bana bir başka (i den 7 kat daha uzun) bir vektör verecektir. O da [7] vektörüdür. Buradan yola çıkarak diyebiliriz ki:

(7) = (0) + [7]

Bu 1D uzayında (7) şöyle çizilebilir:
Kod: [Seç]
                            7i
            ----------------------------------->           [7]
<---------(0)--(1)---------------------------(7)------>   (1D uzayımız)
            ----->                                         [1]
              i
Şimdi uzay muzay dedik ama sayı doğrusu çizdik :). Ama uzayı tanımlarken bir tane vektör vardı dolayısıyla sadece tek yönde olabilir uzayımız, yani '1 boyutludur'.

Şimdi daha ileri gitmeden vektör ile nokta arasındaki ayrımı da vurgulayalım. Nokta bu tanımlı uzayda fiks bir koordinattır. Bu koordinat bir pozisyondur, yani yönü ve uzaklığı vardır. Ama vektör denen hadise sadece yön ve uzaklıktan oluşur. Yani [7] vektörünü alsak mesela (3) noktasına eklesek:

(3) + [7] = (10)

Sonuçta (7)'den farklı bir noktaya ulaşırız. Vektörlerin bir konumu yoktur onlar sadece bir yerleri gösterir sürekli.

Şöyle düşünün ileriyi gösteren bi Atatürk heykeli olsun. Bu heykeli alıp denize karşı koyun. Atatürk burada denizi mi gösteriyordur? Hayır, ileriyi gösteriyordur. Alın heykeli benim karşıma koyun. Atatürk beni mi gösteriyor? Hayır, yine ileriyi gösteriyor.

Yani vektörle ulaştığınız yer vektörü bağlamaz. O sadece yön ve uzaklıktır. Gösterdiği yer, nerden gösterdiğine bağlı olarak değişir. Daha rahat edecekseniz vektörler birer oktur da diyebiliriz.

"Şimdi vektörler uzayımızın neresinde? Eleman mı onlarda?" diyeceksiniz. Diyin, güzel soru olur.

Bu uzay kümelerini niçün oluşturmuştuk? Geometrik cisimleri tanımlayabilmek için. Peeeki, bu cisimler için vektörler bir anlam ifade eder mi? Hayır, cisimlerin tamamı noktalardan oluşur. Ama uzayı tanımlamak için vektörleri kullandık. Aslında nokta da kullanabilirdik ama vektörlerle diğer noktaları tanımlamak daha kolay. Burada hem vektör hem nokta olması işi karıştırıyor. O zaman uzaydan noktaları atıp her şeyi vektör yapalım. Noktalara da sıfırdan bakılan vektörler gözüyle bakalım. Yani (a) noktası (0) dan bakan [a] vektörü olsun. Böyle bir [a] vektörüne 'pozisyon vektörü' deriz. Pozisyon vektörü bir noktanın pozisyonunu belli eden hadisedir. Bu sayede 1D uzayını
  • ve [1] vektörleriyle tanımlayabilirim. Hatırlamam gereken
  • 'ın bir pozisyon vektörü olması gerektiğidir. Bu iki vektör bu uzayın 'basis'idir (beysis). Basisi biliyorsam tüm uzayı biliyorum demektir.


Bu şekilde bir basis ile tanımlanıp, diğer vektörleri ve pozisyonları oluşturan uzay da 'vektör uzayı' oldu galiba. Bu uzayda [a] pozisyon vektörü bulunacaksa şu denklem kullanılabilir:

[a] =
  • + ai
[a] =
  • + [a]
[a] = [a]

Ulan Bunların Hepsi Sayı Doğrusu, Yoksa Bizi mi Yiyorsun?

Şimdiiii... Artık yeterli alt yapımız varsa biraz daha ilginç meseleler konuşabiliriz. Benim elimde bir adet 1D Uzayı var,
  • merkezi ve i yani [1] yönüyle tanımlanmış. Bu uzaya da 'referans 1D uzayı' diyelim. Çünkü bu uzayı kullanarak başka uzaylar oluşturacağız.


Herhangi başka bir 1D uzayı daha oluştururken yine
  • ve i'den oluşan basisim olmalı. Ama oluşturduğum her 1D uzaydaki bu vektörler aynı şeyler olmayabilir. Örnekle; her çekirdek ailede bir anne ve baba vardır. Ama her ailenin babası aynı değildir.


Misal Erkan Ailesi olsun (Rufus değil!!). Bu ailenin bireyleri şunlar olsun.
Baba:  Ahmet Erkan
Anne:  Neriman Erkan
Oğlan: Tayfun Erkan

Bi de Günay ailesi olsun:
Baba:  Remzi Günay
Anne:  Yeliz Günay
Kız:   Esra Günay
Oğlan: Umut Günay

Yeliz Günay ile Ahmet Erkan kardeş olsun.

Şimdi ilişkiler şöyle olacak:
Ahmet, Tayfun'un babası.
Remzi, Esra'nın babası.
Ama Ahmet Esra'nın babası değil, dayısı olacak. Ya da uzunca, annesinin kardeşi.

Burada referansımız Esra ise Remzi baba, Ahmet dayı olacak. Halbuki referans Tayfun olsaydı, Ahmet baba olacaktı. Ama iki aileyi de anne, baba çocuklarla tanımladık. İki aile bireyi arasındaki ilişkiyi bilmek için birinin annesiyle birinin babası arasındaki ilişkiyi bilmem yetti.

Aynı şekilde iki uzay arasındaki ilişkiyi bilmek için de basisleri arasındaki ilişkiyi bilmem yeter. Örneğin referans basisim
  • merkez ve [1] yön idi.
  • ' merkez ve [1]' yön basisine sahip bir de başka uzayım olsun. Burada tırnağı belirtme sebebim basisteki vektörlerin yeni uzaya göre tanımlı olmaları. Bu basisi eski uzaya göre de tanımlarsam iki uzay arasında geçişler serbest kalır.


Örneğin desem ki "Yeni uzaydaki merkezim
  • ' eski uzayda [5] noktasına karşılık geliyordu; yeni uzaydaki [1]' yönü de eski uzaydaki [2] vektörüdür." Bu durumda yeni uzayımın eski (referans) uzayında nasıl konuçlandığını anlatmış olurum. Bu hemen gözle idrak edilemeyebilir birazdan örneklerle pekiştiricem.


Şimdi bütün 1D uzaylar kendi bakış açılarından
  • merkez ve [1] yön vektörleriyle tanımlı. Bu matematiksel tutarlılığı sağlıyor ama başka bilgi vermiyor. O yüzden bütün uzayların basislerini referans uzayının gözünden vermek daha mantıklı. Örneğin yeni tanımladığım bir uzay için [2],[4] basisine sahiptir diyorsam burada kastım merkezinin referans uzayında (2) noktasında oluşu ve birim vektörünün referans uzayında [4] vektörü olması. Ama kendi bakış açısından bu basis yine
  • ', [1]' olacaktır.
Aaaa! Dur Çok Karıştı!

Tamam biraz rahatlayın. Bir adet örnek çözelim, ne dersiniz?

Şimdi yine standart referans 1D uzayım var. İkinci bir uzayı [4] merkez ve [1] birim vektörü olarak tanımlıyorum. Bu uzayları karşılaştırmalı çizersek:
Kod: [Seç]
               Jale
<--(-2)--(-1)---(0)---(1)---(2)---(3)---(4)---(5)---(6)---(7)------>
Referans uzayım: [0],[1]

<--(-6)'-(-5)'-(-4)'-(-3)'-(-2)'-(-1)'--(0)'--(1)'--(2)'--(3)'----->
Yeni uzayım:     [4],[1]
                                        Celal
Yeni uzayımda merkez yani (0) noktası eski uzayımdaki (4) noktası olacak. İki uzayda da birim vektör [1] dolayısıyla yeni uzayın birim pozisyonu referans uzayında göre (4) + [1] = (5) noktası olacak. Ama bu nokta yeni uzayda (1)' adıyla anılmaya devam edecek. Örneğin yeni uzaydaki (-3)' noktası referansta (1) e denk gelecek.

Şöyle düşünün; referans uzayım koridor olsun (0) noktası da Jale'nin oda kapısı. Yeni bir uzay tanımlayıp merkezini yani (0)' noktasını Celal'in odası yaptım. Soruyorum, Celal'in odasının 3 birim gerisi, Jale'nin odasının neresindedir? (-3)' = (1) idi. Demek ki Jale'nin odasının bir birim sonrasındadır.

Yeni uzayımın basisi
  • ,[1] olsun. Yeni uzayımdaki bir (a)' noktası aslında referans uzayında (a + o) dur. Yani


(a)' = (a + o)

(-3)' = (-3 + 4)
(-3)' = (1)

Bir başka örnek daha çözelim. Yeni uzayımızın basisi
  • merkez, [3] yön vektörü olsun. Çizersek:
Kod: [Seç]
<--(-3)--(-2)--(-1)---(0)---(1)---(2)---(3)---(4)---(5)---(6)------>
Referans uzayım: [0],[1]

<--(-1)---------------(0)---------------(1)---------------(2)------>
Yeni uzayım:     [0],[3]
Eğer yeni uzayımın basisi
  • merkez ve
  • yön vektörleri ise, yeni uzayımdaki bir (a)' noktası referansta (a * x) ;


(a)' = (a * x)

eğer x negatif bir sayı ise uzayım referansın aksi yönüne bakacaktı. Örneğin
  • merkez [-1] yönlü bir uzayda:


(-8)' = (-8 * -1)
(-8)' = (8)

olacaktır. Açık değilse çizip görün.

Peki hem merkez hem de yön vektörü gudikse ne olacak? Misal yeni uzayımın basisi [-3] merkez ve [1/2] yön vektörü ise:

Kod: [Seç]
<--(-3)--(-2)--(-1)---(0)---(1)---(2)---(3)----->
Referans uzayım: [0], [1]

<---(0)---(2)---(4)---(6)---(8)--(10)--(12)----->
Yeni uzayım:     [-3],[1/2]

Referansta -3 merkezinde konuçlanacak uzay, ama yeni uzayda bir birim referansta yarım birime denk gelecek.

  • merkez ve
  • yön basisine sahip bir uzaydaki (a)' noktası referansta (a * x + o) olacaktır.


(a)' = (a * x + o)

Ters Çevrimler

Şimdi bir referans uzayımız ve bir de referans uzayında basisi
  • merkez ve
  • yön olan yeni bir uzayımız var demiştik. Bu yeni uzaydaki bir nokta merkezde nereye denk geliyo bulmak için (a)' = (a * x + o) denklemini kullandık. Peki referansta bir nokta merkezde nereye denk geliyo nasıl bulacaz? Çok basit:


(a) = ((a - o) / x)'

Yaptığımızın tersini yaptık yani. Örnek verirsek bi üstteki şekilde mesela referansataki (1) yeni uzayda nerde olacak?

o = -3
x = 1/2

(1) = ((1 + 3) * 2)'
(1) = (4 * 2)'
(1) = (8)'

Şekilden de görüldüğü gibi öyle.

Bi de referans basisimizin yeni uzaydaki hali ne olur onu hesaplayalım:
Bi kere [1] = [1/x]' haline gelir. Yani yeni uzayda bir birim referansta x birimse, referansta bir birim yeni uzayda 1/x birim olur.
Merkezi bulmak için üstteki formülü kullanıyoruz.
(0) = ((0 - o) / x)'
(0) = (-o / x)'
  • = [-o / x]'


Yani referans basisimiz yeni uzayda [-o / x] merkez ve [1/x] yön vektörlerine denk geliyor.

Bi de fark etmediyseniz belirteyim. Normal vektör çevirirken basisler arasındaki yön vektörlerini kullanmak yeter (yani x ile çarpıp bölmek). Çünkü bu vektörlerin bir konumu yoktur, merkezden etkilenmezler. Halbuki pozisyon vektörleri çevrilirken pozisyonların çevrilmiş değerlerini alırlar. Onlar (0) noktasında konumlanıp pozisyon gösteren özel bir vektörlerdir. Örneğin
  • = [-o / x]' dediğimizde merkezin pozisyon vektörü çevirmiş olduk.
Özet

İki uzayın basisleri:

  • ', [1]' =
  • ,
  • [0], [1]  = [-o / x]', [1/x]

    Vektör çevrimleri:

[a]' = [a * x]
[a] = [a / x]'

Pozisyon çevrimleri:

(a)' = (a * x + o)
(a) = ((a - o) / x)'

Eksperimental

Peki ya x = 0 olsaydı? O zaman yeni uzayım 0D Uzayı olurdu ve tek bir noktası olurdu. O da referans uzayında (o) noktasına denk gelirdi. Referansta ise sadece (o) noktası bu yeni uzaya dahil olurdu. Bu uzaya ben 'sıkıştırma uzayı' diyorum. Niçün?
  • merkez ve
  • yön ile tanımlı bir uzayda herhangi bir (a)' noktası:


(a') = (a * x + o)
(a') = (a * 0 + o)
(a') = (0 + o)
(a') = (o)

olacaktı. Yani yeni uzayda hangi noktayı alırsam alıyım referansta tek bir nokta demekti. Bu da tüm uzayın sıkıştırılması oluyor. 2D ve 3D de daha anlaşılır olur burası sanırım.

Son Bir Kaç Söz

Birinci boyutun üzerine çıkamadık ama geometrinin temeli ve çevrimlerin önemli bir kısmı bunlardan ibaret. Buraya kadar Sensei'nin 1D Uzay yazının benzerini işledik. Sonraki kısımda 'Kartezyen Sistem'i göreceğiz. Gerçi buraya kadar ki uzaylar da kartezyendi ama ikinci boyuta geçince kartezyen olmayan uzaylar da olabilir. Neyse ki onlar bu tutorialın konusu değil.

Temel Geometri

« Yanıtla #3 : 02.10.2005 02:55:45 »
Hızlı düğmeleri aç

spaztica

İleti: 1.493

Çevrimdışı
  • Administrator
  • *****
  • Hero Member
    • Profili Görüntüle
ellerine sağlık; epey zahmet etmişsin yazıyı girmek için. güzel bir yazı, bir ara print edeyip tuvalet için başucu kaynağı haline getireyim; malum, türk'ün aklının nerede çalıştığı...

şaka bir yana bu yazıları inşallah yakında forum yazısı olarak değil de article olarak ekleme avantajımız olacak. elimdeki sitenin kodunu bitirir bitirmez kodu tamamen bize ait olan bir yapımız olacak ve tabii ki bu gibi yazılar, siteye eklenecek ilk yazılarımız olacak.

çaban takdire değer; eminim bundan faydalananların hayır duaları eksik olmayacak... :o)

Temel Geometri

« Yanıtla #4 : 02.10.2005 02:58:55 »
Hızlı düğmeleri aç

anesthetic

İleti: 403

Çevrimdışı
  • ****
  • Sr. Member
    • Profili Görüntüle
    • http://resident.tr-demoscene.info/
Teşekkürler. Bugünlük bu kadar :) Kalanına sonra devam edeceğim. Sonra nasip olursa OpenGL'e giriş filan ne gelirse o vakit elimizden.

Temel Geometri

« Yanıtla #5 : 02.10.2005 03:02:52 »
Hızlı düğmeleri aç

skate

İleti: 5.245

A Sinner Scener
Çevrimdışı
  • Administrator
  • *****
  • Hero Member
    • Profili Görüntüle
    • http://www.akaydin.com/
Baştan sona okudum, çok güzel yazmışsın anes. Ellerine sağlık. Ben de bu konuda Sensei / Realtime'ın yazdığı bir article'ın linkini veriim hemen. Türkçe kaynakların artması süper birşey...

http://www.akaydin.com/misc_files/1d.zip

Temel Geometri

« Yanıtla #6 : 04.10.2005 23:28:34 »
Hızlı düğmeleri aç

anesthetic

İleti: 403

Çevrimdışı
  • ****
  • Sr. Member
    • Profili Görüntüle
    • http://resident.tr-demoscene.info/
KARTEZYEN SİSTEM

Bu bölümde genel olarak 2D uzay hakkında konuşacağız. 1D uzaydaki çevrim formüllerini deneyerek bulmuştuk. Bu sefer bunu bir raya oturtacağız. Yani "Bir uzayın, referans başka bir uzaydaki basisini biliyorsak; o uzaydaki tüm vektörlerin karşılıklarını referans uzayda bilebiliriz, hemi de böyle." diyebilir hale geleceğiz. Bunun için de başlıktaki sistemi kullanacağız.

Nedir Bu Kartezyen?

Efendim bu kelimeyi ilk kez duyuyorsanız korkmayın. Eğer bir önceki bölümü okuduysanız hiç bi zorluk yaşamayacaksınız. Önceki bölümde gördüklerimize bi daha bakalım.

Şimdi demiştik ki geometrik cisimler, elemanları noktalar olan kümelerdi. Bu noktaları ve dolayısıyla cisimleri tanımlayabilmek için, yani noktaları pozisyonlarına göre sınıflandırabilmek için, uzayları oluşturduk. Dedik ki, bir uzaydaki tüm noktaları bir merkez noktası ve bir kaç vektör yardımı ile adlandırabiliriz. Sonra vektör ve nokta kavramları içiçe geçmesin diye, noktaları 'pozisyon vektörü' olarak tanımladık. Pozisyon vektörleri sürekli merkezden sabit bir noktayı gösteren vektörlerdi. Bunun aksine yön vektörleri ise uzayda sadece bir yön belirtmekte ve özellikle tek bir noktayı göstermemektelerdi.

Sonra 0D uzayı tanımladık. Bu, tek noktadan (merkez) oluşan dolayısıyla isimlendirme ihtiyacı duymayan bir uzaydı.

Ardından 1D uzaya geçtik. 1D uzayı tanımlamak için bir adet pozisyon vektörü (merkez) ve bir adet yön vektörü kullandık (birim vektör). Sonra dedik ki bütün 1D uzaylarda bu merkez vektörü
  • , yön vektörü ise [1] olmak zorundadır. Fekat, eğer bu uzaydaki noktaları başka bir uzaydan refere ediyorsam, bu vektörler haliyle farklı isimlerle çağrılacaktı. Uzaylar arasında bir takım vektör çevrimleri gördük. Fakat her 1D uzayın kendi temel vektörleri
  • pozisyon ve [1] yön vektörleri olarak kaldı. Bu iki vektöre 1D uzayın 'basis'i adını verdik. Tüm diğer pozisyon vektörlerini bu basisi kullanarak tanımlayabildik. Örneğin [16] adlı pozisyon vektörü için:[16] =
  • + 16[1] ya da
  • [16] =
  • + 16i dedik.


Yön vektörleri ise [8] = 8i gibi daha kısa bir tanıma sahipti.

Niye pozisyon vektörlerini
  • ile toplayarak tanımlıyoruz? Dedik ki pozisyon vektörleri merkezden bi noktayı gösteren vektörler. Uzaylar arası çevrim yaparken, bu 'merkez' hadisesini olaya katmadığım için yanlış sonuçlar elde edebilirim.[/i]

    Şimdiii... Geldik ikinci boyuta. Bu cümleyi okuyunca her yeni boyutta baştan yazı gerekecek sanmayın. Çünkü uzay tanımlamayı artık bir standart içine sokacağız ve n. boyuttaki uzayı gözümüzle canlandıramazsak bile kağıtta şak şak belirtebileceğiz.

    Neyse, şimdi 1D uzay hadisesinde tüm pozisyonlarımız bir çizgi (yani doğru) üzerinde bulunuyordu. 2D uzayda bunu biraz daha aşıp bir düzlem haline getireceğiz. Yani 2D uzayımızdaki noktaları öyle bir sistemle tanımlayacağız ki, tanımlayabildiğimiz tüm noktalar, sağa sola yukarı aşağı sonsuza kadar giden bir cismi, yani düzlemi meydana getirecek.

    Bu 2D uzayı oluştururken, yine bir standart basisimiz olacak. Bu basisin ilk vektörü yine merkez noktası olacak. Bundan başka iki farklı vektör daha gerekiyor bize. Çünkü tek vektörle sadece bir doğru üzerinde gidebileceğiz.

    Bu vektörlerden ilki yine bir yön vektörü olacak. Lakin sonuncu vektör yön vektörü olmayabilir. Şimdi, kafanızı biraz kurcalayıp toparlayım hemen: Bu son vektörü 'radyal vektör' yapıp 'Polar Koordinat Sistem'le bir uzay oluşturabilirsiniz. Yahut uydurduğunuz başka bir vektör türüyle, uyduruk başka bir sistem meydana getirebilirsiniz. Ama neyse ki tüm bunlar bu tutorialın dışında. Bizim yapacağımız son vektörü de yön vektörü olarak tanımlamak.

    Yani uzayımızın basisi için bir pozisyon (merkez), iki adet de yön vektörü (birim vektörler) kullanacağız. Bunun adına da 'Kartezyen Sistem' adını vericez. Ve uzayın adı '2D Kartezyen Uzayı' olacak. N boyutlu uzay için de, bir tane pozisyon ve N tane yön vektörü gerekecek. Ona da 'ND Kartezyen Uzayı' diyeceğiz. Bu kadar basit işte.

    Bu kartezyen sistem 0, 1, 2, 3, 4, 5, 6... boyutlu tüm uzaylar için kullanılabilen bir sistem (ki 0D ve 1D için zorunlu) ve mucidi 'René Descartes' isimli Fransız matematikçi, filozof. Şu "Düşünüyorum, öyleyse varım." diyen adam. Ama şu an aramızda yok ne yazık ki.

    Şimdi "Ne lan bu? Bi yön vektörü daha eklemiş adam, zibidiye bak!" diyebilirsiniz, lakin Öklit geometrisinin bu şekilde bir sistematiğinden ilk bahseden kişidir. Lafınızı geri almazsanız sizi tenkit ederim.

    Şimdi çok rahatça farkedebileceğiniz gibi, 2D'de sayıları tek sayı ile ifade edemiyoruz. Çünkü her pozisyon merkeze eklenecek ve diğer iki yön vektörü cinsinden tanımlanacak. Dolayısıyla her iki vektörün şahsiyetinden 'ne kadarını' taşıdığını belli edecek iki sayıya ihtiyacımız var.

    2D uzayın merkez pozisyon vektörüne her zaman [0, 0] adını vereceğiz. İlk yön vektörüne ise, [1, 0] yahut i diyeceğiz. İkinci yön vektörü ise [0, 1] ya da j ismiyle ortamlarda çağrılacak. Herhangi bir başka yön vektörü [a, b] ise şöyle tanımlanacak:

    [a, b] = a[1, 0] + b[0, 1]
    ya da
    [a, b] = ai + bj

    Pozisyon vektörleri ise:

    [a, b] = [0, 0] + a[1, 0] + b[0, 1]
    ya da
    [a, b] = [0, 0] + ai + bj

    şeklinde ifade edilecek. Bu pozisyon vektörlerini merkezle toplama hadisesi aklınızdan çıkarsa matrislerde zorluk çekersiniz, bunu da belirteyim.

    Şimdi 2D uzayımızın basisi neydi hatırlayalım:
    [0, 0] pozisyon vektörü
    [1, 0] yön vektörü
    [0, 1] yön vektörü

    Biz bunu '2D Kartezyen Uzayı' için tanımladık. Ama bu yazıda '2D Uzay' deyince bundan bahsediyor olacağım.

    Bir de, kartezyen olmayan uzaylarda vektör isimleri yine aynı olacaktır ama tipleri farklı olacaktır. Örneğin '2D Polar Uzayı'nda üçüncü vektör '[0, 1] radyal vektörü' olacaktı.

    Buraya kadar hiç zor olmadı sanırım. Ama şimdi beyin kıvrımlarınızı biraz daha bükmeniz gerekecek.

    2D Uzayda Çevrimler

    2D uzayda çevrimleri eskisi gibi örneklerle görelim.

    Şimdi bir adet referans 2D uzayım olacak bu sefer de. Tüm uzayların basisleri kendilerine göre zaten aynı olduğu için bütün bu basisleri referans uzayımda tanımlayacağım. Örneğin bir başka yeni uzay kendi bakış açısından [0, 0]' pozisyon, [1, 0]' ve [0, 1]' yön basisine sahip olsa bile, referans uzayımdan atıyorum [4, 5] pozisyon, [2, -3] yön ve [1, 0] yön vektörü olarak görülebilecek.

    En basit örneğimiz yeni uzayın [a, b] merkez ve [1, 0] ile [0, 1] birim vektörlerine sahip olması. Bu duruma şöyle bakın; referans uzayımın düzlemi üzerinde [a, b] pozisyonu merkezi olacak sankim başka bir benzer uzay varmış gibi. Burada çizemiyorum kusura bakmayın. Ama aklınızda canlandırması o kadar da zor değil sanırım.

    Atıyorum, mesela yeni uzayımızın merkez noktası referans uzayda [4, -2] olsun. Bu durumda yeni uzayda [8, 2]' diye bi nokta (pozisyon) verdim. Bu nokta aslında referans uzayda [4, -2] + [8, 2], yani [12, 0] noktası olacak. Bu kanıya nası vardım peki?

    Şimdi bu nokta kendi uzayında şöyle tanımlı değil miydi?

    [8, 2]' = [0, 0]' + 8[1, 0]' + 2[0, 1]'

    Peki aynı formülü referans uzayında kullanırsam:

    [x, y] = [4, -2] + 8[1, 0] + 2[0, 1]
    [x, y] = [12, 0]

    Ne kadar basit değil mi? Burada yaptığım şey ne? Bir uzaydaki pozisyon vektörünün başka bir uzayda nasıl ifade edildiğini bulmak. Bu pozisyon vektörü nasıl tanımlıydı peki? Merkezi, artı birim vektörlerin pozisyon değerleriyle çarpımının toplamı. Bu merkez ve birim vektörlerin referans uzayında tanımlı hallerini yazarsam sonucum da referans uzayında çıkacaktır.

    Yahni... Bir uzayın referansımdaki basisini biliyor olmam, o uzayın tüm pozisyonlarını rahatça referansıma çevirebilmem demek. [8, 2]' noktası referansta aslında, yeni merkezimden, 8 tane yeni i vektörü ve 2 tane yeni j vektörü kadar uzaktaydı. Bu kadar basit.

    Bir başka örnek çözelim:

    Bir yeni uzayın basisi referans uzayımda şu vektörlere denk geliyor.
    [2, -1] pozisyon (o)
    [2, -2] yön (i)
    [0,  3] yön (j)

    Sorarım: Yeni uzaydaki [5, 1]' pozisyon vektörü referansımda nereye denk geliyor?

    Cevap:

    [5, 1]' = [x, y]
    [x, y] = [2, -1] + 5[2, -2] + 1[0, 3]
    [x, y] = [2 + 5 * 2 + 1 * 0, -1 + 5 * -2 + 1 * 3]
    [x, y] = [12, -8]

    Peki yine sorarım bu yeni uzaydaki [2, 3] yön vektörü referansta nereye geliyor?

    Cevap:
    [2, 3]' = 2[2, -2] + 3[0, 3]
    [2, 3]' = [2 * 2 + 3 * 0, 2 * -2 + 3 * 3]
    [2, 3]' = [4, 5]

    Yön vektörü çevirirken hesaba merkezi katmadık. Neden? Çünkü yön vektörü sadece yönlerle ilgilenir. Merkezle alakası yoktur.

    Bi de şöyle bir hadise aklınızı karıştırmış olabilir. Yeni uzayımızın birim vektörleri, referansımızda birbirlerine dik olmayabilir. Bunun sebebi zaten burda diklik miklik filan bahsetmedik. Uzaydaki vektörleri nasıl tanımlıyoruz nasıl adlandırıyoruz, bir uzaydaki bir vektör, bir diğerinde nasıl çağrılıyor, bunları gördük. Bu sistemleri kullanarak kurduğumuz geometrik yapı, örneğin bilgisayar monitöründe, bunlar dik olup olmayabilir. Bunun dışında her zaman [1, 0]'ı [0, 1]'e dik kabul edeceğiz. Yani i'yi j'ye. Ama bu vektörler çevrilip başka bir uzayda bakılırsa sanki dik değillermiş gibi gözükebilir.

    Şöyle örnek vereyim: Referans uzayım tepsinin dibindeki düzlemi ifade etsin, yeni uzayım ise baklavanın dibi olsun. Ama yeni uzayın basisini baklava dilimlerini görecek şekilde belirtiyim. Yani [3, 2]' bana 3. satır ve 2. sütundaki baklavayı versin. Böyle bir sistem tepsiden bakıldığında tabi ki diksel (ortogonal) olmayacaktır, ama baklava açısından eksenler diktir. Gibi...


    Neyse çevrimler bu kadar basit. Asıl mesela ters çevrimlerde...

    Ters Çevrimler

    Şimdi yeni uzayımız üzerindeki tüm vektörlerin referans karşılıklarını bulabiliyoruz? Peki tersinden naber? Referanstaki bir vektörün yeni uzayımızda nasıl gösterildiğini nerden bileceğiz?

    Tek mantık referans uzayın basisini yeni uzayda bilmek. Yeni uzayı referansta tanıyoruz, aynısını çevirmemiz lazım. Bu hiç de kolay bi şey değil. Fark ettiyseniz 1D uzayda bile acayip bi sonuç çıktı. Tamam şu kadarı basit: birinde a kadar ileri gitsem diğeri a kadar geri gider. Birini b kadar döndürsem, diğer basis -b kadar döner. Ama ya bunları birlikte yaparsam? Ya birim vektörlerim kaymışsa (dik değilse) ve boyutları değişmişse?

    Bunu yapmanın en kolay yolu galiba matris kullanmak :) ama şimdilik ona bulaşmadan deneyelim. Onun dışında ters basisleri almak zor iş o yüzden direk çevrim denklemlerinin tersini almaya çalışalım. Yine de denklemler kafanızı karıştırırsa çok fazla üzerine gitmeyin. Hatta direk Buraya Atlayın diyen yere atlarsanız çok şey kaybetmezsiniz.

    Şimdi normal çevrim şöyle idi:
    [a, b]' = [c, d]
    [a, b]' = [ox, oy] + a[xx, xy] + b[yx, yy]
    [a, b]' = [ox + a * xx + b * yx, oy + a * xy + b * yy]

    Buradan da:

    c = ox + a * xx + b * yx
    d = oy + a * xy + b * yy

    Burada [a, b]' yeni uzayda [c, d] ise referans uzayındaki karşılığım. Amacım a ve b'yi, c ve d cinsinden bulmak. İkinci denklemi yx/yy ile çarparak a'yı buluyorum.

    c           = ox           + a * xx           + b * yx
    d * (yx/yy) = oy * (yx/yy) + a * xy * (yx/yy) + b * yy * (yx/yy)
    d * (yx/yy) = oy * (yx/yy) + a * xy * (yx/yy) + b * yx

    Son bulduğum denklemi ilkinden çıkarırsam:
    c - d * (yx/yy) = ox - oy * (yx/yy) + a * (xx - xy * (yx/yy))
    c - d * (yx/yy) - ox - oy * (yx/yy) = a * (xx - xy * (yx/yy))
    a = [c - d * (yx/yy) - ox - oy * (yx/yy)] / (xx - xy * (yx/yy))
    a = [(c - ox) - (yx/yy) * (d + oy)] / [xx - xy * (yx/yy)]

    Buradan simetri mantığı (aynı şeyi b için yaparsak) ile de şu çıkar:

    b = [(d - oy) - (xy/xx) * (c - ox)] / [yy - yx * (xy/xx)]


    Buraya Atlayın

    İşte böyle saçma salak bi şey çıkması lazım ters çevrimlerin. Ama her boyutta böyle saçma şeylerle uğraşmayacağız. Bu denklemlerin genel bir formu var. O da zor, ama en azından mantığını öğreneceğiz. Tabi ki matrislerde.

    Eksperimental

    Yeni uzayımın basisin referanstaki karşılığında iki yön vektörü birbirlerine paralel oldu diyelim. Bu durumda yeni uzayımdaki tüm noktalar, referans uzayımda bu vektörlerin oluşturduğu doğru üzerinde olacaktır. Türkçe konuşursam; yeni uzayımın basisi referansta şöyle çıktı mesela:

    [0, 0] pozisyon
    [1, 2] yön
    [2, 4] yön

    Bu son iki vektörün tüm kombinasyonları tek doğru üzerinde olacaktır. Dolayısıyla ben, yeni uzayın tamamını, referans uzayımda 'sıkışmış' olarak göreceğim. Bu vektörlerden herhangi biri [0, 0] ise de aynısı olacak. İkisi birden olursa bu durumda uzayım tek bir noktaya sıkışacak. Yani yeni uzayımda hangi noktayı alırsam alıyım, referansta merkeze karşılık gelecek.

    Örneğin yeni uzayımın basisi referansta şöyle olsun:
    [5, 5] pozisyon
    [0, 0] yön
    [0, 0] yön

    Herhangi bir [a, b]' noktasının referanstaki karşılığı:
    [a, b] = [5, 5] + a[0, 0] + b[0, 0]
    [a, b] = [5, 5] olacaktır.

    İşte bu da böyle bir 2D sıkıştırma uzayıdır.

    E Artık Geç Şu Üçüncü Boyuta

    Eğer buraya kadar olan yerleri tastamam anladıysanız, 3. boyuta geçmenin o kadar da zor olmayacağını fark edeceksiniz. (Gerçi ben anlatabildiğime pek ihtimal vermiyorum, ama scener dediğin zeki olur zaten.) Fiziksel uzaya geçtiğimiz vakit yesyeni kavramlarla karşılaşıcaz. Mantık yine aynı olsa da, bu mantıkla daha fazla gidemeyeceğimizi fark edicez. Bütün bunların hepsi bi sonraki bölüm olan 'Üçüncü Boyut ve Devamı'nda.

Temel Geometri

« Yanıtla #7 : 14.10.2005 23:00:07 »
Hızlı düğmeleri aç

anesthetic

İleti: 403

Çevrimdışı
  • ****
  • Sr. Member
    • Profili Görüntüle
    • http://resident.tr-demoscene.info/
ÜÇÜNCÜ BOYUT VE DEVAMI

Bu bölümde asıl ilgi alanımız olan üç boyutlu uzayı göreceğiz. Aslında 1 ya da 2 boyutlu uzaylardan teorik olarak bir farkı yok bu 3D uzayın, ama gözümüze görüntüler sanki 3 boyuttaymış gibi göründüğü için yaptığımız demolarda da bu boyutu kullanıyoruz. Sebep ise 3 boyutlu bir cismin monitör üzerinde izdüşümünün, gözümüzde oluşan görüntüsüyle aynı olması.

Şimdi çok kısa bir hatırlatma yapalım. 2D bir referans uzayında, başka yeni bir 2D uzayın basisi şöyle olsun:

[ox, ox] pozisyon vektörü (orijin),
[xx, xy] yön vektörü (i),
[yx, yy] yön vektörü (j).

Bu yeni uzayımızdaki bir pozisyon vektörünün ([px, py]'), yani bir konumun, referans uzayında şöyle ifade edildiğini söylemiştik:

[px, py]' = [ox, oy] + px[xx, xy] + py[yx, yy]

Bir yön vektörü ([vx, vy]') ise, referans uzayına geçtiğinde şu değerlere sahip olacaktı.

[vx, vy]' = vx[xx, xy] + vy[yx, yy]

Yani yön vektörleri uzaydan uzaya geçerken orijinlerin nerede olduğu ile ilgilenmiyordu. Sadece yön çevrimleri yapılıyordu. Bi de burada dikkatlı okuyucunun (eheh) fark edeceği üzere her vektörde vektörün cinsini belirttik. Halbuki pozisyon ve yön vektörlerini ayırmak için bi notasyon kullansak ne süper olacak. İleride onu da yapacağız, az sabredin.

Üçüncü Boyut

Eğer uzayımız 1D ya da 2D değil de 3D olsaydı durum yine değişmeycekti. Eğer tutorialı buraya kadar takip ettiyseniz ben söylemeden aşağıdakileri çıkarabilirsiniz.

Her 3D kartezyen uzayımızın basisi kendi içinde şöyle ifade edilecek:

[0, 0, 0] pozisyon vektörü (o),
[1, 0, 0] yön vektörü (i),
[0, 1, 0] yön vektörü (j),
[0, 0, 1] yön vektörü (k),

Aynı uzay içindeki tüm pozisyon vektörleri de önceki yöntemlerle ifade edilecek. Örneğin [5, -2, 8] pozisyon vektörü dediğimde bu şu anlama gelecek:

[5, -2, 8] = [0, 0, 0] + 5[1, 0, 0] - 2[0, 1, 0] + 8[0, 0, 1]
[5, -2, 8] = orijin + 5i - 2j + 8k

Bunun yanı sıra bir [5, 2, 0] yön vektörü mesela şu açılıma sahip:

[5, 2, 0] = 5[1, 0, 0] + 2[0, 1, 0] + 0[0, 0, 1]
[5, 2, 0] = 5i + 2j + 0k

"Neden pozisyon vektörlerinde orijini dahil ettik? Zaten sonuca etki etmiyor." demeyin artık. Çünkü daha önce de belirttiğim gibi, bu vektörü başka bi uzayda gösterirken orijin, o uzaydaki koordinatlara göre olacak. O zaman da sonuca etki edecek. Yani orijinin üzerine vektör ekleme, tüm pozisyon vektörlerinin tanımında var. Bu hadise de sadece matematiksel bütünlük sağlamak için değil. İleride o orijin ekleme olayı belki de hayatımızı kurtaracak.

Ha bu arada; ikinci boyutta kullandığımız x ve y eksenlerine, artık z'yi de ekledik. Söylemeyi unuttum ama o kadar önemli değil.

Üçüncü Boyutta Çevirimler

Her zamanki gibi yine bir referans uzayım var ve tüm sonuçlarımı bu uzayın vektörleri cinsinden vereceğim. Bir de hep 'yeni' dediğim (niyeyse) başka bir uzay var. Bu yeni uzayın basisinin referans uzayımdaki karşılığını biliyorum. Amacım, yeni uzayımda koordinatları verilmiş bir pozisyon yahut yön vektörünü referans uzayımın koordinatlarına çevirmek.

Pozisyon vektörü çevirimi için:
[px, py, pz]' = [ox, oy, oz] + px[xx, xy, xz] + py[yx, yy, yz] + pz[zx, zy, zz]

Yön vektörü çevrimi için:
[vx, vy, vz]' = vx[xx, xy, xz] + vy[yx, yy, yz] + vz[zx, zy, zz]

Örneğin yeni uzayımın basisinin referans uzayımdaki hali şöyle olsun:

[4, 2, 0] orijin
[3, 1, 0] i
[0, 3, 2] j
[1, 1, 6] k

Yeni uzayımda bir adet [3, 2, 2]' pozisyon vektörü olsun. Bunun referanstaki karşılığı şöyle olacaktır:

[3, 2, 2]' = [4, 2, 0] + 3[3, 1, 0] + 2[0, 3, 2] + 2[1, 1, 6]
[3, 2, 2]' = [4, 2, 0] + [9, 3, 0] + [0, 6, 4] + [2, 2, 12]
[3, 2, 2]' = [4 + 9 + 0 + 2, 2 + 3 + 6 + 2, 0 + 0 + 4 + 12]
[3, 2, 2]' = [15, 13, 16]

Yeni uzayımda bir adet [1.5, 1, 0.5]' yön vektörünün karşılığı ise şöyledir:

[1.5, 1, 0.5]' = 1.5[3, 1, 0] + 1[0, 3, 2] + 0.5[1, 1, 6]
[1.5, 1, 0.5]' = [4.5, 1.5, 0] + [0, 3, 2] + [0.5, 0.5, 3]
[1.5, 1, 0.5]' = [4.5 + 0 + 0.5, 1.5 + 3 + 0.5, 0 + 2 + 3]
[1.5, 1, 0.5]' = [5, 5, 5]

Hiç bi yeni olayımız yok. Aynı yöntemleri kullanarak yaptık hepsini.

Ters Çevrimler

Ters çevirimde amacımız referans uzayındaki bir vektörün, basisi referans uzayında belli bir uzayda nasıl gösterildiğini bulmak. Ama hatırlarsanız geçen bölümde iki boyutta bile bunu yapmak için ne taklalar atmıştık; ki yine de referans uzayının, yeni uzaydaki basisini bulamadık. O yüzden bu kısmı şimdilik atlıyorum. Lakin unutmayın ki kendileri gayet de önemli bir konu, çünkü kamera yaparken bunları kullanacağız.

3D Uzayda Birtakım Başka Olaylar

3D uzayımızın diğer 1D ve 2D uzayda bulunmayan bir özelliği mevcut. Ona geçmeden önce biraz vektörlerle uğraşalım.

Bir vektörle bir sayıyı çarpmayı, yani vektörün bir katını bulmayı anlatmadım ama her yerde kullandım. Zaten çok acayip bi şey değil. Bir vektörün a katı şöyle olacak:

a[x, y, z] = [ax, ay, az]

Aynı zamanda iki vektörün toplamı (ya da farkı) da bu yazılarda anlatılmadı. O da şöyle olacaktı.

[x1, y1, z1] + [x2, y2, z2] = [x1 + x2, y1 + y2, z1 + z2]

Bu iki işlemi çevrimlerde sürekli kullandık ama tanımlarını yapmamıştık. Zaten çok da önemli değil, direk nasıl yapılacakları belli.

Ama vektörlerle nasıl yapılacağı direk belli olmayan bir işlem var, o da çarpma. Şimdi ilk akla gelen çarpma yöntemi şöyle:

[x1, y1, z1] * [x2, y2, z2] = [x1 * x2, y1 * y2, z1 * z2]

Gayet güzel bir teknik lakin bu işlemde sonuçta elde ettiğimiz vektör bize genelde hiç bi şey sağlamıyor. Onun yerine sonucu pratikte işe yarayan iki çarpım tekniği var. Bunları sırayla görelim.

Skalar Çarpım

'Skalar çarpım' şöyle gösteriliyor:

[x1, y1, z1] . [x2, y2, z2] = x1 * x2 + y1 * y2 + z1 * z2

Yani karşılıklı elemanları çarpıp, bu çarpımların toplamını alıyoruz. Bu işleme, nokta ile gösterildiği için aynı zamanda 'dot product' da der gavurlar. Skalar çarpımda iki vektörü çarparak vektör olmayan (skalar) bir değer buluyoruz.

Şimdi bu çarpımın bize sağladıklarını öğrenelim.

Eğer bir vektörü kendisi ile skalar çarparsak şöyle olur:

[x, y, z] . [x, y, z] = x² + y² + z²

Bir vektörün uzunluğu ise 'Pisagor Teoremi' ile şöyle tanımlıdır:

[x, y, z] vektörünün uzunluğu r ise,
r = karekök (x² + y² + z²)

Demek ki;

r² = [x, y, z] . [x, y, z]

Yani bir vektörün kendisi ile skalar çarpımı, uzunluğunun karesini verir.

Skalar çarpım sadece 3D için değil tüm kartezyen uzaylar için tanımlı. Örneğin çeşitli uzaylarda şöyle:

1D uzay:
[x1] . [x2] = x1 * x2
[x] . [x] = r² = x²

2D uzay:
[x1, y1] . [x2, y2] = x1 * x2 + y1 * y2
[x, y] . [x, y] = r² = x² + y²

5D uzay:
[ax1, ax2, ax3, ax4, ax5] . [bx1, bx2, bx3, bx4, bx5]
   = ax1 * bx1 + ax2 * bx2 + ax3 * bx3 + ax4 * bx4 + ax5 * bx5

[x1, x2, x3, x4, x5] . [x1, x2, x3, x4, x5]
   = r² = x1² + x2² + x3² + x4² + x5²

Skalar çarpımın bir güzel özelliği de şöyle:
[x1, y1] vektörünün uzunluğu r1 yani karekök (x1² + y1²) olsun.
[x2, y2] vektörünün uzunluğu ise r2 olsun. Bu durumda şu olur:

[x1, y1] . [x2, y2] = x1 * x2 + y2 * y2 = r1 * r2 * cos(theta)

Theta diye seslendiğimiz şey bu iki vektörün yönleri arasındaki açıdır. Yani a ve b adlı iki vektörün arasındaki açıyı istiyorsak şu denklemi kullanırız.

theta = acos(a.b / (ra * rb))
ra = karekök(a.a) ve rb = karekök(b.B) olduğu içün:
theta = acos(a.B) / karekök(a.a * b.B)

Bu açıyı her boyutta bulabiliriz, hatta kolaylık açısından 1D uzayda bakalım.

[x1] . [x2] = x1 * x2 = r1 * r2 * cos(theta)
r1 = x1 ve r2 = x2 olduğu için
x1 * x2 = x1 * x2 * cos(theta)
cos(theta) = 1

Yani 1D uzaydaki herhangi iki vektör arasındaki açı ya 0 ya da 180 derece olacak.

Skalar çarpımla başka neler yapabiliriz? Bunlar bilinmesi gerekli şeyler değil isteyen atlayabilir.

Eğer bir vektörü kendi uzunluğuna bölersek, 1 uzunluğunda ve aynı yöne bakan bir vektör elde ederiz:

a / ra = a / karekök(a.a)

Bir vektörün başka bir vektör üzerindeki izdüşümünün uzunluğu ise kendi uzunluğu * cos(theta)'dır. Yani a vektörünü b vektörü üzerine yansıtırsak ortaya çıkan vektörün uzunluğu şudur:

ra * cos(theta) = karekök(a.a) * cos(theta)
ra * cos(theta) = (ra * rb * cos(theta)) / rb
ra * cos(theta) = (a.B) / rb

Şimdi, bu izdüşüm vektörü b ile aynı yönde olacak (kağıda çizip görün). Yani b yönündeki birim vektörü izdüşüm vektörünün uzunluğuyla çarparsak, izdüşüm vektörünü buluruz.

b yönündeki birim vektör b / rb idi.

izd-ab = (b / rb) * (a.b / rb)
izd-ab = (b * a.B) / rb²
izd-ab = (b * a.B) / b.b

Aynı mantıkla b vektörünün a üzerindeki izdüşümü şöyle olur:

izd-ba = (a * a.B) / a.a

Buradaki bölüm işleminin üst kısmı bir vektör çarpı bir skalar, yani bir vektör. Bir skalara bölersem bunu, sonuç yine vektördür. Bu izdüşüm vektörünü kartezyen kamera olayında kullanacağız. Ama orada da optional olacak. Aynı zamanda bu izdüşüm hadisesi çok rahatça anlaşılabilecek üzere gölgelendirmede kullanılıyor. Ama o konuya bu tutorialda yer veremeyeceğim. (Ben de bilmiyom lan daha!)


Skalar çarpım hazmedildiyse bir sonrakine geçelim...

Vektör Çarpım

Şimdi skalar çarpımı bi şekilde işimize yaradığı için özel bi şekilde tanımladık. Şimdi iki vektör arasında öyle bi çarpma işlemi tanımlayalım ki, sonuç hem vektör olsun hem de işimize yarasın.

3 boyutta bildiğimiz gibi 3 farklı yöne gidebiliriz. Ve tüm yönlere gidebilmek için en az 3 vektöre ihtiyaç var. O zaman vektör çarpımımız iki vektörü çarptığı zaman, sonuç bu iki vektöre de dik olsun. Bu sayede iki vektörün gidemediği yerlere gidebilecek bir vektör elde edelim. Yani vektör çarpım sonucundaki yönü belirledik.

Bu vektörün bir de uzunluğu olacak. Skalar çarpımda vektör uzunluğu bana iki vektör arasındaki açının kosinüsünü veriyordu. Vektör çarpım sonucu da, bana aynı açının sinüsünü versin de bi işe yarasın.

|a × b| = ra * rb * sin(theta)

Yani diyor ki, a ve b nin vektör çarpımının uzunluğu, bu vektörlerin uzunlukları ile, aralarındaki açının sinüsünün çarpımıdır. Vektör çarpımını '×' ile gösteriyoruz ve bazen 'cross product' diyoruz.

Şimdi yönü hakkında konuşalım. İki vektöre de dik olan yönü verecek. Eğer böyle bir yön tekse 3D uzaydayız (yani 3 tane dik yön vardır) demektir. Bu yüzden vektör çarpım sadece ve sadece 3D uzayda tanımlıdır. Bu da 3D uzayın yazının başında bahsettiğim özelliği idi.

Sonucun yönünü nasıl bulacağız. Şimdi sağ elinizi tabanca pozisyonuna getirin. Baş parmak havada, işaret parmağı ve orta parmak ileriyi gösteriyor. Şimdi orta parmağınızı sola doğru (avuç içine) hareket ettirin. Baş parmağınız hala bu iki parmağa dik kalacaktır. 'İşaret parmağı × orta parmak = baş parmak' olur. Buna 'sağ el kuralı' adını vermişler. Eğer ilk vektörünüz işaret, ikincisi orta parmak yönündeyse, vektör çarpımınız baş parmak yönünde olacaktır. Eğer ters yönde yaparsanız işlemi, ters yönde bir vektör çıkar. Yani:
a × b = -(b × a)

Ne işe yarayacak bu derseniz, mesela işaret ve orta parmağınız, bir yüzeyin bir noktasındaki teğet yüzeyi temsil ediyor olsun, ya da basitçe işaret ve orta parmağınızla bir üçgen oluşturdunuz. Burada baş parmağınız bu üçgene dik olacaktır. Eğer başparmağınızı kendi uzunluğuna bölerseniz, sonuç bu yüzeyin ya da üçgenin normalidir. Bu normal denen birim vektör o yüzeyin o kısmının ne kadar aydınlatılması gerektiği hakkında şahane bilgiler verir.

Vektör çarpım hakkında yeterli teorik bilgimiz olduğuna göre tanımına gelelim. İki vektörün vektör çarpımı şöyle gösterilir:

[x1, y1, z1] × [x2, y2, z2]
   = [y1 * z2 - z1 * y2, z1 * x2 - x1 * z2, x1 * y2 - y1 * x2]

Eğer bu formülü ilk kez görüyorsanız muhtemelen hakkında iyi şeyler düşünmeyeceksiniz. Formülün nasıl çıkarıldığı gibi abuk bi konuya da girmiyorum. Ezberlemenize gerek yok, gerektikçe burdan geçirebilirsiniz. Ama ezberlemek isterseniz de kolay bi yol mevcut (ki ben onu kullanıyorum). Eğer biliyosanız Buraya Atlayın diyen yere atlayın.

Çarpım şöyle olsun:

a × b = c

Kural 1: c'nin x değeri, a ve b'nin y ve z değerlerine bağlı.
Kural 2: c'nin y değeri, a ve b'nin z ve x değerlerine bağlı.
Kural 3: c'nin z değeri, a ve b'nin x ve y değerlerine bağlı.

Bu üç kuralın, c'nin a ve b'ye dik olmasını sağladığını söyleyebiliriz. c nin her elemanı, a ve b'de diğer elemanlara bağlı olacak.

Kural 4:
...ax, ay, az, ax...
...bx, by, bz, bx...

Yani diyor ki (demiyor bendiyorum) çarpımlar tabloda çapraz yapılacak. Yani:
a x b =
   [
     ay * bz - az * by,    // yz ve zy çapraz
     az * bx - ax * bz,    // zx ve xz çapraz
     ax * by - ay * bx     // xy ve yx çapraz
   ]

Kural 5: Çarpımlar arasında eksiler olacak.
Kural 6: Çapraz çarpımlarda, bir önce gelen eleman başlıcak.
Mesela ilkinde y, z'den önce o başladı. İkincide z, x'ten önce (kural 4'e bak) ve üçüncüde de x, y den önce.

Kural 7: a[hede] * b[hodo] - a[hodo] * b[hede] şeklinde bi çaprazlama olacak.

Ehehe fazla kural oldu, ama cidden çok kolay. Şunları hatırlayın:
x elemanı için yazıcam. Bi sonraki y, Demek ki ay * bz - az * by
y elemanı için yazıcam. Bi sonraki z, Demek ki az * bx - ax * bz
z elemanı için yazıcam. Bi sonraki x, Demek ki ax * by - ay * bx


Buraya Atlayın

Vektör çarpım bilmek çevrimlerinizi değiştirmeyecek ama olaya hakimiyetinizi artıracak. Işıklandırma yapacaksanız da zaten kullanmak zorundasınız. OpenGL filan normal bulma özelliği sunuyor, ama performans için kendi normallerinizi kendiniz bulmak isteyeceksiniz (her framede baştan hesaplamamak için mesela).

3D hakkında söylenecek başka bi şey yok. Vektör çarpım hariç tüm kartezyen uzayların özelliklerini taşıyor. Öyleyse artık devamına geçebiliriz...

Daha Fazlası

İnat edip buraya kadar okuduysanız 4, 5 ve daha fazla boyutlar sizin gözünüzü korkutuyor olmamalı. Tüm çevrim formülleri aynı. Hatta matrislere geçince ters çevrimlerin de aynı olduğunu göreceğiz. 3 boyutu monitöre aktarırken perspektif kullanmıyorsak, x ve y değerlerini aynen alıyoruz ve z değerini atıyoruz. 4 ya da 5 boyutlu olsa cisim, yine aynısını yapacağız. Ama sonuçta ortaya çıkan şey çok rahat idrak edilir olmayacak. Aynı zamanda 3D haricinde istediğimiz kadar perspektif tanımlarız ama gözümüzdekinden olmadığı için yine monitörde o ilüzyonu alamayacağız.

Yazının geri kalanı matrislerle ilgili olacak. Onlarda da 3D'den öteye gitmeyeceğiz, ama bilin ki aynı olaylar bi çok alanda çok boyutlarda yapılabiliyor. Bunların geometrik anlamları bile var. Misal vektör alanları yahut tensorler gibi ucubik isimli konular söz konusu olunca çevrimlerin 6 boyutlu matrislerle filan yapılması gerekebiliyor.

O zaman, "Pozisyon, uzay, vektör gibi geometrik kavramları yaladım yuttum, teorik altyapım da az çok oturdu." diyen herkesi bir sonraki yazı olan 'Neden Matrisler?'e davet edelim.

Temel Geometri

« Yanıtla #8 : 15.10.2005 04:55:30 »
Hızlı düğmeleri aç

skate

İleti: 5.245

A Sinner Scener
Çevrimdışı
  • Administrator
  • *****
  • Hero Member
    • Profili Görüntüle
    • http://www.akaydin.com/
anes, genel olarak bildiğim konular olduğu için yalnızca göz attım ancak her zaman elimin altında bulundurmak üzere de tutorial arşivime ekledim elbetteki, ellerine sağlık. bir hayli uğraşmışsın belli ki. teşekkürler ve tebrikler...

Temel Geometri

« Yanıtla #9 : 15.10.2005 12:12:38 »
Hızlı düğmeleri aç

nightlord

İleti: 1.085

Çevrimdışı
  • Administrator
  • *****
  • Hero Member
    • Profili Görüntüle
    • http://www.nightnetwork.org
selam anesthetic

sonunda bugun butun tutoriallerini derinlemesine okuma sansim oldu. ellerine saglik.

genelde alisilanin aksine kumeler, uzay geometri, analitik geometri ve yer yer felsefe hatti uzerinden konulari anlatmissin. benim icin okumasi cok lezzetli olmakla beraber pedagojik acidan konuyu bilmeyenlere bazi zorluklar dogurabileceginden endiseleniyorum. 0D uzay 1D uzay gibi kavramlar ve uzaylar arasi cevrimler ozellikle text ortaminda bu konulari bilmeyenlere cok zor gelebilir. buna karsin hayli fazla numerik ornek verip cozuyorsun bu da anlasilmayi kolaylastiracaktir. Benim nacizane onerim bu tutorialde daha fazla cizim kullanman yonunde. kimi insanlarin gorsel algilari sozel algilarindan guclu oluyor. bu yuzden cevrim islemleri izdusumler gibi konulari sekil uzerinden cok daha rahat anlayabilirler.

ikinci bir yorumum da cross product formulunu hatirlama kural silsilesi ile ilgili. hatirlamak icin gercekten bu kurallar dizisin kullanman cok ilginc ve lezzetli geldi bana. ben determinant almaya benzeyen

i j k
a b c
d e f

olayini tercih ederim sahsen ama belki de matrisleri ve determinanti henuz anlatmadigin icin bunu anlatmadin. o konulara gelince buna da tekrar deginmeni oneririm.

yazinin genelinde benim bilgim dahilinde goze batan bi yanlislik goremedim. sadece ilk bolumdeki aritmetik geometri vs programsa matematik programlama dilidir benzetmesi hayli tartismaya acik bi tespit :)

cok detayli bi calisma gercekten tebrik ederim. bundan sonra cikan bolumleri de ilgiyle takip edecegim. ve elimden geldigince proofread etmeye devam.

ve diger arkadaslar gordugunuz gibi tutorialler yazarlara gore cok farkli yaklasimlardan yazilabiliyor. okuyucular icin bu farkli perspektifler ne kadar cesitlenir ve cogalirsa bir tutorialden anlamadiklarini digerinden anlama sansi artiyor. bu yuzden yazabilecek biseyleri olan herkesi tutorial yazmaya davet ediyorum

sevgiler saygilar

Temel Geometri

« Yanıtla #10 : 15.10.2005 12:55:57 »
Hızlı düğmeleri aç

skate

İleti: 5.245

A Sinner Scener
Çevrimdışı
  • Administrator
  • *****
  • Hero Member
    • Profili Görüntüle
    • http://www.akaydin.com/
Nightlord: Walla biliyorsundur Sensei'nin de 1d uzay diye tutorialı var. Tahmin ediyorum "temelden girelim" diye bu şekilde yazıyorlar. Bence vektörleri anlatmak için güzel de bir yol. Ancak daha fazla şekil olması gerektiğine katılıyorum.

Temel Geometri

« Yanıtla #11 : 15.10.2005 14:39:05 »
Hızlı düğmeleri aç

anesthetic

İleti: 403

Çevrimdışı
  • ****
  • Sr. Member
    • Profili Görüntüle
    • http://resident.tr-demoscene.info/
başta ben de düşündüm doc ya da htm şeklinde şekillerle mi hazırlayayım diye. sonra ilk önce resimler yokmuş gibi bitirip, resim kullanılmayan mediumlarda işe yaramasını sağlamak istedim. Sonra destekleyici olarak aralara figürler ve grafikler eklemeyi planladım. En son aşamada bu hale getiririm ve octalfoam'da daha da iyi gözükür.

anlatım tarzına gelince de işte dediğim gibi şekillerden soyutlamak için yazıyı elimden geldiğince cebirleştirdim. bu sayede matris kullanımı çok daha rahat anlaşılacaktır diye düşünüyorum. biliyorum birçok kişi anlatım tarzı yüzünden yazıları takip edemeyecek. bir de görsel anlatıma yer veren bi tutorial olsa aynı konuyla ne kadar güzel olur, birini takip edemeyen diğerine geçer.

yazıları kontrol ettiğiniz için de ayrıca teşekkür ediyorum. 2-3 kere okuyup post ediyorum ama ondan sonra bile aradan kaçanlar olabiliyor.

Temel Geometri

« Yanıtla #12 : 28.10.2005 17:14:38 »
Hızlı düğmeleri aç

Decipher

İleti: 482

Çevrimdışı
  • ****
  • Sr. Member
    • Profili Görüntüle
    • http://beskrajnost.com
cidden süper bir tutor merak ettiğim bir çok şeyi buldum içinde süperdi cidden aynı zamanda print alıp tutor duvarıma yapıştırdım :D
100% pure coder pr0n

Temel Geometri

« Yanıtla #13 : 28.10.2005 21:04:14 »
Hızlı düğmeleri aç

anesthetic

İleti: 403

Çevrimdışı
  • ****
  • Sr. Member
    • Profili Görüntüle
    • http://resident.tr-demoscene.info/
teşekkürler.

matrix chapterları çok yakında "3 chapter birden" formatında geliyor!! (şu ödevler bi bitse)

Temel Geometri

« Yanıtla #14 : 29.10.2005 10:33:16 »
Hızlı düğmeleri aç

eirik

İleti: 312

Çevrimdışı
  • ****
  • Sr. Member
    • Profili Görüntüle
    • http://localhost/
hacIm o degil de bir matrisin ozdegerleri ve ozvektorunu degi$tirerek resmin $eklini degi$tirebiliyormu$sun elementer satir yada sutun i$lemleri araciligiyle, ozdeger ozvektor (eigenvalue, eigenvector) olaylarInI deginmedin sen sanIrIm da akLInda bulunsun dedim. $ekil degi$tirmeden kastim ornegin resmi dikdortgenden paralel kenar yapmak gibi. $u psp de vektorel bi katman ekledikten sonra merkezin yanIndaki noktayi cekerek yapmak gibi $eyler.