SORU
30 Aralık 2008, Salı


Daire-Dikdörtgen çarpışma algılama (kavşak)

Nasıl bir daire ve 2 boyutlu Öklid uzayda dikdörtgen bir bilgisayar olup olmadığını söyleyebilir miyim? (2D geometri yani klasik)

CEVAP
31 Aralık 2008, ÇARŞAMBA


Ben bunu nasıl burada

bool intersects(CircleType circle, RectType rect)
{
    circleDistance.x = abs(circle.x - rect.x);
    circleDistance.y = abs(circle.y - rect.y);

    if (circleDistance.x > (rect.width/2   circle.r)) { return false; }
    if (circleDistance.y > (rect.height/2   circle.r)) { return false; }

    if (circleDistance.x <= (rect.width/2)) { return true; } 
    if (circleDistance.y <= (rect.height/2)) { return true; }

    cornerDistance_sq = (circleDistance.x - rect.width/2)^2  
                         (circleDistance.y - rect.height/2)^2;

    return (cornerDistance_sq <= (circle.r^2));
}

İşte nasıl çalışır:

illusration

  1. Çizgiler ilk çift dairenin merkezi dikdörtgenin merkezi arasındaki x ve y farkı mutlak değerlerini hesaplamak. Bu hesaplamalar dört kez yapılması gerekir, böylece bir aşağı dört bölümün çöker. Bu resim hangi dairenin ortasına şimdi yalan gereken alanı gösterir. Sadece tek çeyrekte gösterilen unutmayın. Dikdörtgen gri alan ve kırmızı sınır dikdörtgenin kenarlarından tam olarak bir yarıçapı olan kritik alan özetliyor. Çemberin merkezine kavşak oluştuğu için bu kırmızı çerçeve içinde olmalı.

  2. Hatların ikinci çift Daire no kesişme mümkün olan dikdörtgen (her iki yönde) yeterince uzak bir yerde kolay davaları ortadan kaldırmak. Bu resimde yeşil alana karşılık gelir.

  3. Satır üçüncü çift daire bir kavşak garantili dikdörtgen için yeterince yakın (her iki yönde) kolay davalarını. Bu resimdeki turuncu ve gri bölümlerine karşılık gelir. Bu adım, mantık için 2. adımdan sonra mantıklı yapılması gerektiğini unutmayın.

  4. Kalan hatları çember, dikdörtgen köşe bilgisayar nerede zor durumda hesaplamak. Çözmek için, ağırlık merkezi ve köşesinden mesafe hesaplama ve mesafe çemberin yarıçapı daha fazla olduğunu doğrulayın. Bu hesaplama kırmızı taralı alan içinde olan tüm çevreler için false değerini döndürür ve beyaz taralı alan içinde olan tüm çevreler için true değerini döndürür.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Capcom Unity

    Capcom Unity

    5 NİSAN 2010
  • incognitotraveler

    incognitotra

    27 Mayıs 2010
  • PCDIY

    PCDIY

    16 AĞUSTOS 2013