İletileri Göster

Bu özellik size üyenin attığı tüm iletileri gösterme olanağı sağlayacaktır . Not sadece size izin verilen bölümlerdeki iletilerini görebilirsiniz


Mesajlar - anesthetic

Sayfa: 1 ... 25 26 [27]
391
teori / Temel Geometri
« : 02.10.2005 02:58:55 »
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.

392
teori / Temel Geometri
« : 02.10.2005 02:51:27 »
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.

393
teori / Temel Geometri
« : 02.10.2005 02:43:10 »
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.

394
teori / Temel Geometri
« : 02.10.2005 02:41:22 »
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.

395
demoscene / 7d5 party reaction
« : 26.09.2005 19:56:13 »
7d6'ya 12 yaşındaki kardeşimi de getirmeyi düşünüyorum. az biraz c biliyor gerçi ama partiye kadar ilk pikselini basar :P. 4k'da release bile yapabilir ehehehe.

396
demoscene / 7D6 ile ilgili
« : 25.09.2005 09:05:25 »
bazı partilerde 64k/4k ortak compo düzenliyor. tabi 4kların 64klarla kapışması uygun değil ama demolarla kapışması da hiç uygun değil. 4k da yeterli katılım olur ise kendi dalı açılır.

tabi 64k/4k da bi iki tane entry varsa onlar da demoya alınır.

397
demoscene / 7d5 bitişi...
« : 20.09.2005 21:27:16 »
ben duygularımı peandoas kadar açık ifade edemeyeceğim sanırım. dilim döndüğünce artık.

ilk kez bir scene partiye katılma heyecanım partiye ürün sunmakla katlandı. partinin de süper geçmesi ile hayatımdaki en önemli olaylarından birini yaşadım.

her şeyden önce "milli scene tarihi" kitaplarından tanıdığımız insanları köfte ekmek yiyip, kola içerken gördüm. "anaa senin benim gibi adam la bu" dedim :) orada benim gibi heyecanlı diğer ufaklıkları izledim onlarla kaynaştım.

resident tayfasının tamamı ile sonunda tanışma fırsatı elde ettim. spritus'la sonunda yüz yüze geyik yapabildik. peandoas'ın benden çok daha heyecanlı olduğunu gördüm. en çok istediğim şey de erik'in sonsuz bilgisinden kültüründen faydalanmaktı, onu da elimden geldiğince elde ettim. örneğin bruce lee'yi fbi öldürtmüş onu öğrendim. :)

bi de şöyle bi olay oldu. daha parti mekanına girdikten beş dakika sonra şu konuşma gerçekleşti:
nightlord: En son poligon fill yapmıştım sonra bi süre...
iç ses: aa nightlord mu bu?
nightlord: ...o arada misti bitirdim işte...
iç ses: aaa nightlord evet evet.
spritus: anes misti izledin di mi?
anesthetic: evet evet, mist.
iç ses: aa nightlordun ta kendisi!

sonra yemekte nightlord'la elimden geldiğimce muhabbet ettim :)

cumartesi günü 64knın son satırlarını gizli saklı yazmaya çalışmak ayrı bir keyifti. bir el compile tuşunda diğer el alt+tab'de, bir göz monitörde diğeri arkada kod yazmak, becerilerimi iyice geliştirdi. seneye tek ayak çalışmalar gerçekleştirmek lazım :)

flexi parti boyunca aynı demoyu 500 kez izledi, başkalarına izletti. (olm ben keşfettim onu :) ) müzik kompoya isteksiz katıldı ama çok iyi sonuç aldı.

benim açımdan partinin doruk noktası nested'ın yayınlandığı dakikalardı. inanılmaz bi heyecan yaşadım, kalbim neredeyse yerinden çıkacaktı. scg böyle olacağını söylemişti ama bu kadarını tahmin etmiyordum. seneye aynı şeyi en az iki kez yaşamak istiyorum.

ayrıca çok şanslıyız ki demomuz 64kb'a sığdı, yoksa demo compoda esaslı rakipler olacaktı. :) glance'ın demosu living'i izlerken çok büyük keyif aldım. ayrıca raven'ın demosu glory'nin yayınlanmasını da dört gözle bekliyorum. o renkli spiralin nasıl yapıldığını çözmem lazım :)

seneye görüşmek üzere... değil tabi :) o zamana kadar resident olarak yeni demolarla karşınızda olacağız. hatta 7d6 pc davetiyesine yine talip olmak istiyoruz.

tabi bazı negatif olaylar da yaşandı. örneğin tesla'nın oyununun compo makinesinde çalışmaması hepimizi telaşlandırdı. çok kötü gaza geldik, seneye game compo bizim :)

bir de istanbul-ankara yolunda scg ile muhabbet etmek ayrı bi keyif olurdu sanırım. ümidim onun da bir gün gerçekleşmesi.

sonuç itibari ile partide ragnor'un oyunundaki, gibi high scoresta gözükecek kadar gaz topladım. :D

398
geyik / partiye gelen reply etsin!
« : 16.09.2005 19:58:56 »
birazdan çıkıyorum. kaybolmazsam flexi, tesla, shoggoth ile birlikte gelicem.

399
izleyebildim şunu sonunda. işte bunlar ekranlarda görmek istediğimiz türden şeyler. hepinize teşekkürler.

400
pc / BMP Loader
« : 29.08.2005 20:26:11 »
bmp dosyalarının içeriğini kolayca almayı anlatalım bakalım biz de, ufak da olsa bi katkımız olsun.

.bmp dosyaları iki struct (file header, bitmap header) ve iki arrayden oluşuyor (color index, color data). Çeşit çeşit bitmap dosyası olduğundan, bu verileri okuyup renkleri alan bi programın bol bol koda sahip olması gerekli. Ama bunlar winapi altında var zaten. İşte burda bu yükü winapi'ye yükleyip nasıl bitmapi okuturuz onu anlatacağım. (gdi plus'ta aynı işi yapan tek bi fonksiyon var sanırım. Belki normal gdi'da bile vardır ama bulamadım.)

Programımız dosya ismini alacak ve renkleri 24bit yerleştirdiği belleğin adresini dönecek. Aynı zamanda verilen integer adreslerine genişlik ve yüksekliği yazacak. Bitmap için handle, bitmap bilgisi için BITMAP structeı, bitmapi okumamıza yardım edecek device context için handle, bir kaç geçici integer ve belleği dolduracağımız yer için bir pointer gerekli.
Kod: [Seç]
unsigned char* LoadBitmapFromFile (TCHAR* szFileName, int *piWidth, int *piHeight)
{
     HBITMAP hBitmap;
     BITMAP  Bitmap ;
     HDC     hDC    ;

     unsigned int  iColor, x, y, iPos = 0;
     unsigned char *pcRGBArray           ;
İlk önce verilen dosya ismini kullanarak dosyamızı bitmap olarak alalım. Bunun için LoadImage fonksiyonunu kullanıyoruz, processlerden değil de dosyadan aldığımız bir çok parametre 0. Önemli olan dosya ismi ve bitmap olduğu. (LoadBitmap fonksiyonu resourcedan almak için kullanılıyor.)
Kod: [Seç]
hBitmap = LoadImage (NULL, szFileName, IMAGE_BITMAP, 0, 0,
                      LR_LOADFROMFILE | LR_CREATEDIBSECTION);
if(hBitmap == NULL)
{
     MessageBox (NULL, TEXT("Dosya yüklenemedi."),
                 szFileName, MB_ICONERROR);
     return NULL;
}
Şimdi bitmapimizin genişlik ve yüksekliğini almak için GetObject fonksiyonunu kullanacağız. Bu fonksiyon bitmap handleı için BITMAP structeı dolduracak. Bitmap adlı structeımızın boyunu ve adresini yolladık mı o bize gerisini yapacak.
Kod: [Seç]
GetObject (hBitmap, sizeof (Bitmap), &Bitmap);
Yeni doldurulmuş structımızı okuyalım ve genişik, yükseklik bilgilerimizi yazalım:
Kod: [Seç]
*piWidth  = Bitmap.bmWidth;
*piHeight = Bitmap.bmHeight;
Sıradaki işimiz bitmapimizi analiz edip ekran moduna uygun hale getirmek. İlk önce mönitör ile uyumlu bir device context hazırlıyoruz. (CreateCompatibleDC başaramazsa NULL dönecektir isterseniz kontrol edebilirsiniz.) Daha sonra bu device contexti bitmap üzerinde kullanıyoruz.
Kod: [Seç]
hDC = CreateCompatibleDC (NULL);
SelectObject (hDC, hBitmap);
Artık bitmapimiz gdi fonksiyonları ile çizime hazır ama amacımız bu değil. Artık bitmapimize ait bir device contextimiz olduğuna göre istediğimiz pikseli GetPixel fonksiyonu ile görebiliriz. (SetPixel'le de yazabiliriz.) Şimdi renk bilgileri için yer alıp orayı dolduralım (GDI'ın renkleri 0xBBGGRR formatında tuttuğunu unutmadan). Her pikselde rengi integer olarak alıyoruz. 24bit renk arrayimiz için piksel adresinde R, G, B sırasıyla 3 byteı dolduruyoruz.
Kod: [Seç]
pcRGBArray = (unsigned char*)malloc ((*piWidth) * (*piHeight) * 3);
for (y = 0; y < (*piHeight); y++) for (x = 0; x < (*piWidth); x++)
{
     iColor = GetPixel (hDC, x, y);

     pcRGBArray[iPos++] =  iColor        & 0xFF;
     pcRGBArray[iPos++] = (iColor >>  8) & 0xFF;
     pcRGBArray[iPos++] = (iColor >> 16) & 0xFF;
}
Son olarak ortalığı toparlıyoruz:
Kod: [Seç]
DeleteObject (hDC)    ;
DeleteObject (hBitmap);
ve fonksiyondan çıkabiliriz:
Kod: [Seç]
    return pcRGBArray;
}

Kodun tamamı şöyle olacak:
Kod: [Seç]
unsigned char* LoadBitmapFromFile (TCHAR* szFileName, int *piWidth, int *piHeight)
{
     HBITMAP hBitmap;
     BITMAP  Bitmap ;
     HDC     hDC    ;

     unsigned int  iColor, x, y, iPos = 0;
     unsigned char *pcRGBArray          ;

     hBitmap = LoadImage (NULL, szFileName, IMAGE_BITMAP, 0, 0,
                           LR_LOADFROMFILE | LR_CREATEDIBSECTION);
     if(hBitmap == NULL)
     {
          MessageBox (NULL, TEXT("Dosya yüklenemedi."),
                      szFileName, MB_ICONERROR);
          return NULL;
     }

     GetObject (hBitmap, sizeof (Bitmap), &Bitmap);
     *piWidth  = Bitmap.bmWidth;
     *piHeight = Bitmap.bmHeight;

     hDC = CreateCompatibleDC (NULL);
     SelectObject (hDC, hBitmap);

     pcRGBArray = (unsigned char*)malloc ((*piWidth) * (*piHeight) * 3);

     for (y = 0; y < (*piHeight); y++) for (x = 0; x < (*piWidth); x++)
     {
          iColor = GetPixel (hDC, x, y);

          pcRGBArray[iPos++] =  iColor        & 0xFF;
          pcRGBArray[iPos++] = (iColor >>  8) & 0xFF;
          pcRGBArray[iPos++] = (iColor >> 16) & 0xFF;
     }

     DeleteObject (hDC)    ;
     DeleteObject (hBitmap);

     return pcRGBArray;
}
Son olarak bir noktaya da değinelim. LoadImage fonksiyonunun aldığı dosya isminde bi iki kriter gerekli (çoğu winapi fonksiyonunda olanlardan):
-Dosya sonu ve başında tırnak olmayacak
-Dizinleri ayırmak için / ya da \ (iki tane) kullanılacak.

Bi de monokrom ya da index color modda device context doğru hazırlanıyor mu deneyemedim ama 16bit renkte sorun yok gibi.

401
demoscene / 7D5 Demoscene Party Eylül'de!!!
« : 18.07.2005 20:09:29 »
ne denebilir ki. 7d4e gelmek istemiştim ama nasip olmamıştı. bu yüzden 7d5i sabırsızlıkla beklemekteydim. zaten hali hazırda bitmek üzere olan stufflar mevcut idi. ama duyuruyu okuyunca tüm duygularım tersine döndü. bu parti bambaşka olacak gibi gözüküyor ve ona layık stufflar hazırlamak lazım. bu da bende bir telaş havası uyandırdı. ama yine de resident'in canhıraş çalıştığını bilmenizi isterim. (öyle di mi lan ? :) )

organizasyonla ilgilenen herkese teşekkürler ve başarılar.

402
geyik / 1 boyutlu tetris
« : 27.05.2005 00:00:22 »
http://www.tetris1d.org/
arkadaşlar olaya son noktayı koymuşlar kanımca. gülmekten karın ağrısı başladı.

403
resident / intro!!
« : 13.04.2005 23:41:05 »
yorumlarınız için çok teşekkürler. :) vallahi aklımda bi şey vardı yapsam mı yapmasam mı derken, bu kadar güzel tepki alınca kesin yapma kararı aldım. haftasonu yine kendi çapında bir şeye başlayacağım. bu sefer hemen bitsin diye sonunu merdane efektleriyle yamamıycam ama :)

ne olduğu hakkında gizemli beyanatlarda bulunup beklentiyi artırmayayım aman. open gl öğreniyorum öylesine bi şey olacak işte. :) bu sefer gruptaki insanlarla ortak bi şeyler olsun istiyorum. hatta toollar hazırlayıp sunucam.

çok gizemli oldu sanırım. :) olsun beklentinin yükselmesi kaliteyi de yükseltir.

bi de pek bilmiyorum ama bu tür şeyler 16kb den fazla olmuyor sanırım. ne yapmalıyım nasıl küçülecek bunlar :)

bi de gerekli gereksiz smiley koyanları dövmüyosunuz di mi :)

404
resident / new member
« : 06.12.2003 23:56:11 »
teşekkürler efenim sağolun varolun. size layık olmaya çalışıcam artık ben de. gerçi pek bi tecrübesiz pek bi kınalı kuzu modundayım şu an ama alışıcaz artık.

Sayfa: 1 ... 25 26 [27]