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

Whistle

Ruhsuz :/
Kurucu
Geliştirici
Yardımsever Üye
Mesaj
11.943
Çözümler
567
Beğeni
13.660
Puan
5.915
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.
 
Geri
Üst