Çözüm Java Bir nesnenin tamamen diğer nesne içerisinde olduğunu tespit etme

Bu konu bir çözümü açıklamaktadır. Herhangi bir çözüm açıklanmadığını düşünüyorsanız konuyu rapor edebilirsiniz.
Katılım
5 Mart 2014
Mesajlar
5.701
Makaleler
12
Çözümler
44
Java:
    public Boolean IsCompletelyInside(Claim OtherClaim) {
        return this.Pos1.PosX >= OtherClaim.Pos1.PosX &&
               this.Pos2.PosX <= OtherClaim.Pos2.PosX &&
               this.Pos1.PosY >= OtherClaim.Pos1.PosY &&
               this.Pos2.PosY <= OtherClaim.Pos2.PosY &&
               this.Pos1.PosZ >= OtherClaim.Pos1.PosZ &&
               this.Pos2.PosZ <= OtherClaim.Pos2.PosZ;
    }

Bu kod bir nesnenin diğer nesne ile çakışıp çakışmadığını belirtiyor. 2 boyutlu ortamda güzel çalışıyor ama işin içine 3. boyut girince karmaşıklaşıyor.

Ben bu kodu şöyle güncellemek istiyorum. X, Y ve Z dahil bir nesne oluşturulduğunda diğer nesne ile karşılaştırma yapılacak. Eğer yeni nesne, karşılaştırma yapılan nesnenin tamamen içinde yer alıyorsa true döndürecek. Denedim fakat düzgün çalışmıyor. Nerede hata yapıyor olabilirim?

Problemi bu kodla çözdüm. Bu sayede 3 boyutlu ortamda bir nesnenin bir nesne içerisinde olduğunu anlayabiliyoruz. Eğer true döndürürse nesne, diğer nesnenin içinde demek.
Java:
public Boolean IsCompletelyInside(Claim OtherClaim)
{
    int xMin = Math.min(OtherClaim.Pos1.PosX, OtherClaim.Pos2.PosX);
    int xMax = Math.max(OtherClaim.Pos1.PosX, OtherClaim.Pos2.PosX);
    int yMin = Math.min(OtherClaim.Pos1.PosY, OtherClaim.Pos2.PosY);
    int yMax = Math.max(OtherClaim.Pos1.PosY, OtherClaim.Pos2.PosY);
    int zMin = Math.min(OtherClaim.Pos1.PosZ, OtherClaim.Pos2.PosZ);
    int zMax = Math.max(OtherClaim.Pos1.PosZ, OtherClaim.Pos2.PosZ);
    return xMax >= this.Pos1.PosX
        && this.Pos1.PosX >= xMin
        && yMax >= this.Pos1.PosY
        && this.Pos1.PosY >= yMin
        && zMax >= this.Pos1.PosZ
        && this.Pos1.PosZ >= zMin
        && xMax >= this.Pos2.PosX
        && this.Pos2.PosX >= xMin
        && yMax >= this.Pos2.PosY
        && this.Pos2.PosY >= yMin
        && zMax >= this.Pos2.PosZ
        && this.Pos2.PosZ >= zMin;
}
 
Son düzenleme:
Bu kullandığın şeyin isminin AABB olması lazım, genelde dikdörtgenler için kullanılır ama cidden biraz daha ileri bir şey istiyorsan biraz lineer cebirle daha ileri düzey şeyler yapabilirsin ayrıca nasıl çalıştığını anlaması bazı yerlerinde biraz nokta çarpımı ve 3 boyutlu versiyonunda çapraz çarpımın ne olduğunu gibi bir iki temel lineer cebir bilgisi gerektiriyor ama GJK'ye bakabilirsin textbook bir collision detection algoritması.
 

Bu konuyu görüntüleyen kullanıcılar

Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için çerezleri kabul etmelisiniz. Daha Fazlasını Öğren.…