2 boyutlu uzayda bir objenin belirli bir konum içerisinde olduğunu tespit etmek

Whistle

Ruhsuz :/
Kurucu
Geliştirici
Yardımsever Üye
Mesaj
12.282
Çözümler
573
Beğeni
15.640
Puan
6.281
Ticaret Puanı
2
2 boyutlu düzlemde herhangi bir objenin belirli bir konum içerisine geldiğini nasıl tespit ederiz?

İlk önce 2 boyutlu uzay hakkında bilgi edinelim. 2 boyutlu uzayda sağ, sol, yukarı ve aşağı gidebiliriz. Gidebileceğimiz 4 yön vardır.
Yatay harekette bulunduğumuz konuma x, dikey harekette ise bulunduğumuz konuma y diyoruz.

Aşağıdaki görselde 2 boyutlu uzayın koordinat düzlemi örneği yer almaktadır.
2 boyutlu uzay koordinat sistemi.jpeg

Merkez noktası 0, 0 olacak şekilde sağ tarafa gittikçe x değeri artar, sol tarafa gittikçe x değeri azalır. Yukarı ilerledikçe y artar aşağı indikçe y azalır.
2 boyutlu düzlemde merkeze kendinizi koyarak diğer cizimlere olan uzaklığı da bulabilirsiniz ancak bu konumuzda 2 boyutlu düzlemde belirli bir bölgenin içerisine herhangi bir obje girdiğinde bunu koddan tespit etmek istiyoruz.

Öncelikle 2 boyutlu uzayımızı çizelim. 0,0 noktası sol üst köşedeki nokta olacak.
2 boyutlu uzay.jpeg


400x400 alana sahip bir tane 2 boyutlu uzayımız mevcut. Bu uzayımızda 2 tane obje oluyor. şekil 2'yi hareket edebildiğini hayal edelim. Şekil 1'i ise bu uzayda yer alan belirli bir alanı hedefleyelim. Mesela bir ev olabilir ya da ekranda gördüğümüz düğme? :)

Şimdi gelelim sorulara;
Şekil 2, şekil 1'in alanına girdiğin nasıl tespit ederiz?

Öncelikle 2 boyutlu render işlemlerinde bilgisayar soldan sağa doğru olmak üzere aşağıya doğru sıralı bir şekilde çizimleri yapar. Bir oyun kodluyorsanız saniyede bu çizim belirlediğiniz frame rate oranına göre tekrarlanacaktır.

Şekil 1: 100, 60 konumunda yer alıyor. İlk önce şekil 1'in tüm köşelerinin bulunduğu konumu bulmamız gerekiyor. Bunu bulmak için başlangıç noktasını referans alabiliriz. Basit anlaşılması için dikdörtgen seçtim.

Sol üst = (x, y) = (100, 60)
Sağ Üst = (x+75, y) = (100+75, 60)
Sol alt = (x, y+30) = (100, 60+30)
sağ alt = (x+75, y+30) = (100+75, 60+30)

Yani benim şekil 1'in dört köşesinin bulunduğu konum şu sayılara denk gelecektir;
şekil 1 köşelerin konumu.jpeg


Şekilimin köşelerinin konumunu bildikten sonra artık çarpışma noktalarını tespit edebilirim ve şekil 2 bu alana girip girmediğini tespit edebilirim.


SEKIL2_X > SEKIL1_X && SEKIL2_X < SEKIL1_X+SEKIL1_GENISLIK = bu bize x konumunda 100 ila 175 arasında olup olmadığının sonucunu verecektir.
SEKIL2_Y > SEKIL1_Y && SEKIL2_Y < SEKIL1_Y+SEKIL1_YUKSEKLIK = bu bize y konumunda 60 ila 90 arasında olup olmaduğunun sonucunu verecektir.

Eğer bu iki sorgumuz bize true değerini verirse şekil 2, şekil 1 ile çarpışmıştır.

JavaScript:
Genişlet Daralt Kopyala
IF ((SEKIL2_X > SEKIL1_X && SEKIL2_X < SEKIL1_X+SEKIL1_GENISLIK) &&
    (SEKIL2_Y > SEKIL1_Y && SEKIL2_Y < SEKIL1_Y+SEKIL1_YUKSEKLIK))

Uygulamak isterseniz basit bir js canvas ile şekil 2 yi hareket ettirip şekil 1 alanına girdiğinde renginin değişmesini sağlayabilirsiniz. şekil 1 alanından çıktıktan sonra rengi eski haline gelebilir.

Bir sonraki yazımda 2 boyutlu uzayda iki nesnenin birbirine olan uzaklığı nasıl bulabileceğinizi anlatacağım.
 
Uyarı: Bu konu açıldığından bu yana baya zaman geçmiş.
Muhtemelen daha fazla tartışma gerekli değildir ki bu durumda yeni bir konu başlatmayı öneririz. Eğer yine de cevabınızın gerekli olduğunu düşünüyorsanız buna rağmen cevap verebilirsiniz.
Geri
Üst