SORU
22 EYLÜL 2008, PAZARTESİ


İki dikdörtgenin kesişim tespit algoritması?

Bir algoritma için ise iki dikdörtgen (keyfi bir açı, sadece dikey/yatay çizgiler ile diğer bir) bilgisayar olmadığını tespit etmek için arıyorum.

Eğer biri bir köşede diğeri ise test, hemen HEMEN çalışır. Eğer dikdörtgenin çapraz gibi şekil verirler yoksa başarısız olur.

Dikey çizgiler için özel durumlar gerektiren satırları, yamaçları kullanarak önlemek için iyi bir fikir gibi görünüyor.

CEVAP
22 EYLÜL 2008, PAZARTESİ


Standart yöntem olacaktıreksen test ayırma(google arama) yapın.

Kısacası:

  • İki nesne eğer iki nesneyi birbirinden ayıran bir çizgi bulabilirsen bilgisayar yok. örneğin, bir nesne, tüm puan / nesneleri hattı farklı taraflardayız.

Komik olan şey ise sadece iki dikdörtgenin tüm kenarları kontrol etmek için yeterli değil. Eğer dikdörtgenler yok diye ayıran eksen olacak kenarları örtüşüyor.

2D yamaçlarında kullanmadan bunu yapabilirsiniz. Bir kenar sadece iki köşe, örneğin arasındaki fark olarak tanımlanır

  edge = v(n) - v(n-1)

90 derece çevirerek bu bir dik alabilirsiniz. 2D bu kadar kolay

  rotated.x = -unrotated.y
  rotated.y =  unrotated.x

Yani hiçbir Trigonometri veya yamaçlarda yer. Birim uzunluk için vektörü normalize ya da gerekli değildir.

Eğer bir nokta veya çizgi başka bir tarafı üzerinde olup olmadığını test etmek istiyorsanız, sadece Nokta-ürün kullanabilirsiniz. işareti hangi tarafta olduğunu söyleyecektir:

  // rotated: your rotated edge
  // v(n-1) any point from the edge.
  // testpoint: the point you want to find out which side it's on.

  side = sign (rotated.x * (testpoint.x - v(n-1).x)   
               rotated.y * (testpoint.y - v(n-1).y);

Şimdi test dikdörtgen tüm noktaları Bir dikdörtgenin kenarlarına B ve tersi. Eğer ayıran bir kenar bulursanız nesneleri (B tüm diğer puan veren edge - çizim aşağıda görmek için test edilen diğer tarafında bulunur) bilgisayar yok. Eğer hiçbir ayırıcı kenar bulursanız ya da dikdörtgen ile kesişen ya da bir dikdörtgen diğer bilgiler.

Herhangi bir dışbükey ile test çalışmaları btw.. çokgenler

Değişiklik:Ayıran bir kenar tanımlamak için, diğer her kenarına bir dikdörtgen tüm noktaları test etmek için yeterli değildir. Aday-edge E (aşağıda) olarak tanımlanan bir ayırıcı kenar, olarak tüm noktalarında aynı yarı düzlem E. Ancak, değil mi bir ayıran kenar köşe Vb1 ve Vb2 B de o yarı düzlem. Sadece eğer durum böyle olsaydı değil ayıran bir kenar olurdu

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • alexis gillis

    alexis gilli

    23 HAZİRAN 2011
  • bombjack2991

    bombjack2991

    29 HAZİRAN 2008
  • Soulkiller13 ツ

    Soulkiller13

    30 Mayıs 2013