> Ana Sayfa > Yazılar

Grid yapısında doğru ve çember oluşturma

Herkese merhaba bu yazımızda Grid yapısında farklı stratejilerle doğru oluşturma, çember ve daire oluşturma konularından bahsedeceğim. Herkese iki okumalar.

Kordinat sisteminde doğruların veya şekillerin hangi noktanın çevresinden geçtiğini anlamamız gerekebilir. Örneğin bir noktanın 5 yarıçapındaki daire içerisindeki nodları listeleyerek o nodlarda herhangi bir olay(patlama gibi) gerçekleştirebiliriz. Yada bir noddan diğer noda doğru çizerek nodların bir birini görüp görmediğini test edebiliriz. İlk olarak doğru oluşturma stratejilerine bakalım.

Lineer interpolasyonla doğru oluşturma

Lineer interpolasyonla oluşturma, doğru içerisindeki noktalardan uygun pozisyonları seçerek noktalardan nod listesi oluşturmaktır. Bu oluşturulan nodlar birbirine çapraz bağlanabilir.

Öncelikle doğru parçasının x'ler farkını ve y'ler farkını buluruz. Bunlardan mutlak değeri büyük olanı alırız;

$$P_{begin}(x_b,y_b),\qquad P_{end}(x_e,y_e)$$ $$dx=x_e-x_b,\qquad dy=y_e-y_b$$ $$n_{max}=max(abs(dx),abs(dy))$$

Bu değer doğrunun kaç noda temas ettiğini verir. Doğruyu eş n_max parçaya böleriz ve bölüm noktalarından hangi noda daha yakın olduğunu buluruz. Bu nodları listeye ekleyerek sonuca ulaşırız.

$$ P_i=\left( x_b+\frac{dx}{n_{max}}*i \ , \ y_b+\frac{dy}{n_{max}}*i \right) $$

Son olarak i'yerine 0 dan birer birer n_max'a kadar ve x_i, y_i değerleri yuvarlanır böylece nodları buluruz.

Buraya kadar yaptığımızı şimdi koda dökelim

            
        

Dikey ve Yatay hareketle doğru oluşturma

Farkettiğiniz üzere interpolasyonla bulduğumuz nodlarda çapraz hareket olmaktadır. Ama yürürken hareketiniz bu şekilde gerçekleşmez. Bunun için doğrunun temas ettiği tüm nodları bulmamız gerekir. Bunun için her nodu dikeyde ve yatayda iki farklı sınırı varmış gibi düşünmeliyiz. Hangi sınırla önce kesişiyorsa o yöne doğru bir adım ilerleriz taki bitiş nodumuza ulaşana kadar.

Interpolasyonla olan farkını iki görsel daha iyi ifade edecektir.

Bu yöntemi koda dökmek istersek:

            
        

Çember oluşturma

Çember oluşturmak için kullandığımız işlem aslında daha az hatalı nodu seçmektir. Öncelikle en üst noddan çizmeye başlarız. Daha sonra iki farklı nod için iki hatayı hesaplarız. x değerini bir artırarak ilk hatamızı buluruz. İkinci hatayı ise hem x bir arttırıp hemde y değerini bir azaltarak elde ederiz. Hangisinde hata daha azsa o noda geçeriz. Bunu x ve y eşit olana kadar yaparız. Buraya kadar elde ettiğimiz şey bir çemberin sekizde biridir. Bunu 7 kez döndündürerek, yansıtarak tam bir çember elde etmiş oluruz. Bu yaptığımız işlemler sırasında aynı nodu iki kez seçmiş olabiliriz. Bu yüzden Set kullanmamız gerekir. Yada bir kaç değişikle dublikasyonu engelleyebilirsiniz. Şimdi bu anlatılanları koda dökelim.

            
        
Çemberin yarıçapı = 2.00

Daire oluşturma

Çember oluşturmak için kullandığımız algoritmayı ufak değişiklerle daire oluşturmaya dönüştürebiliriz. Her nodu elde ettiğimiz adımda, elde ettiğimiz P(x,y) nodu ile P(x,x) nodu arasındaki tüm nodları alırız. Geri kalan işlemler birebir çember oluşturmakla aynıdır.

Kod

            
        

Aşağıdaki görselsel oluşturduğumuz dairenin nasıl gözükeceğini göstermektedir. Gördüğünüz gibi yarıçap tam sayı olmak zorunda değildir.

Döngü içine eklediğimiz bir döngü bize merkezden itibaren çemberin içinde kalan nodları verecektir. Kodumuzun çıktısı aşağıdaki gibidir.

Örnek görsel

Çemberin yarıçapı = 2.00

Eğer yarıçapı sadece tam sayı kullanacaksanız yukarıdaki algoritmayı bir kere çalıştırıp değerleri kaydedip daha sonra kaydedilen değerleri kullanmak işlemci yükünü azaltacaktır.

Özet ve Eklenebilecekler

Bu yazımda grid yapısında doğru ve daire nasıl çizilir onu anlattım. Doğruyu iki farklı strateji ile çizebiliriz. Interpolasyonla çizmek doğruyu eş parçalara bölüp o parçaların hangi nodları içinde kaldığı ile bulunur. Diğer doğru çizme algoritması ile nodların sınırları ile kesişimlerini bulur ve bitiş noduna kadar sırasıyla uygularız.

Çemberler ve Daire çizim algoritması birbirine çok benzemektedir. 0'dan 45 dereceye kadar nerede az hata geliyorsa nerede sola veya hem sola hemde sağa kaydırırız. 45 dereceye kadar olmasının sebebi dairenin 45'den sonra eğiminin 1 den büyük olması ve bir sola giderken bir den daha fazla aşağıya gidebilmesidir. Yazdığım algoritma daha anlaşılır olsun diye dublikasyonları engellemedim. Bir kaç ufak değişiklikle bunları engelleyebilirsiniz. Ayrıca bu algoritmanın bir benzerini kullanarak elipste çizebilirsiniz.

Bu yazımda anlatacaklarım bu kadar, yazımda hatalı veya eksik bir yer görürseniz benimle iletişime geçmekten çekinmeyin. Herkese iyi kodlamalar.