- 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.
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.
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;
Ş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.
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.
İ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.
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.
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;
Ş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:
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.