JAVA ile alan kontrolünü formül ile yapmak

Mucosoft

Megapat
Katılım
5 Mart 2014
Mesajlar
5.523
Makaleler
12
Çözümler
41
1632454315773.png
Öncelikle şunu belirtmek istiyorum ki hangi programlama dilinin olduğu veya hangi yazılımı kullandığımın bir önemi yok. Çünkü genel bir soru soracağım. Bu işlemi Minecraft sunucusu için yapıyorum. Ben alan kontrolünü tek blok üzerinden sağlıyorum. Yani oyuncu o koordinatta bir alanın olup olmadığını biliyor.

Bir de şöyle bir şey düşünün. Siyah kısım daha önce alınan kısım olsun. Yeşil kısım sorunsuz bir şekilde alınıyor, çünkü çevresinde alan yok. Kırmızı kısmı alan oyuncu siyah alan ile çakıştığı için o alanı alamıyor. İşte sorun da bu. Bunu kontrol etmenin yolu her bir koordinatı tek tek incelemek. Örneğin 100x100x100 arazi var diyelim. Y koordinatı da dahil. 1 milyon blok kontrol ediyor. Bu da milyonlarca işlem demek.

Peki ya bunun daha hızlı bir yolu var mı? Sayısal bir formül ile kontrol yapılabilir mi? Nasıl bir yol izlemeliyiz?
 
O alanın haritadaki koordinatı ile satın alınacak alanın koordinatlarını kıyaslayarak çözebilirsin. Mesela fark eğer alan genişliğinden büyük değilse çakışma vardır. Bunu her eksen için yaparsan 3 tane temel matematik ile çözersin.
 
O alanın haritadaki koordinatı ile satın alınacak alanın koordinatlarını kıyaslayarak çözebilirsin. Mesela fark eğer alan genişliğinden büyük değilse çakışma vardır.
Konuda da bahsettiğim gibi zaten bu yöntemi kullanıyorum, her bir koordinatı taramak performansı etkileyebilir. Özellikle birden fazla üye bu özelliği kullanırken ciddi gecikmeler yapabilir.
 
Konuda da bahsettiğim gibi zaten bu yöntemi kullanıyorum, her bir koordinatı taramak performansı etkileyebilir. Özellikle birden fazla üye bu özelliği kullanırken ciddi gecikmeler yapabilir.
Her koordinatı değil, sadece kenarının koordinatını kontrol edeceksin. X ekseni için dikey kenarın sola uzaklığı, Y ekseni için yatak kenarın üste uzaklığı gibi.
 
Eki Görüntüle 1172265
Bu şekilde yaparsak bu sefer ortada kalan alanlarda işe yaramaz.
Alt ve üst kenar için de yapacaksın. 3 değil 6 işlem olacak. Aslında gerek olmayabilir. Şunu düşün, X eksenine göre çakışma var mı diye bakmak için satın alınan alanın Y eksenine uzaklığı ve satın alınacak alanın Y eksenine uzaklığının farkı satın alınan alanın genişliğinden büyük olmalı. Tabi bu fark mutlak değer olmalı. Satın alınacak alan satın alınana göre solda veya sağdaysa bakacağın kenarlar değişecek.
 

Geri
Yukarı