SORU
20 Kasım 2008, PERŞEMBE


Eğer iki dikdörtgen çakışıyorsa belirlemek?

Kullanıcı aşağıdaki giriş dikdörtgenler (2 ila 5) inşa etmeye götüren bir C programı yazmaya çalışıyorum: yükseklik, x-pos y-pos genişliği. Bu dikdörtgenin paralel x ve 0 yamaçlarında olacak ya o sonsuzluk y ekseni için var olacaktır.

this soru açıklanan uygulamaya çalıştım ama çok şans sahip değilim.

Benim şimdiki uygulama aşağıdakileri yapar:

// Gets all the vertices for Rectangle 1 and stores them in an array -> arrRect1
// point 1 x: arrRect1[0], point 1 y: arrRect1[1] and so on...
// Gets all the vertices for Rectangle 2 and stores them in an array -> arrRect2

// rotated edge of point a, rect 1
int rot_x, rot_y;
rot_x = -arrRect1[3];
rot_y = arrRect1[2];
// point on rotated edge
int pnt_x, pnt_y;
pnt_x = arrRect1[2]; 
pnt_y = arrRect1[3];
// test point, a from rect 2
int tst_x, tst_y;
tst_x = arrRect2[0];
tst_y = arrRect2[1];

int value;
value = (rot_x * (tst_x - pnt_x))   (rot_y * (tst_y - pnt_y));
cout << "Value: " << value;

Ancak (a) doğru şekilde bağlı, ya da eğer bunu yorumlamak için tam olarak nasıl yaptıysam algoritması uygulanan oldum mu emin değilim?

Herhangi bir öneriniz var mı?

CEVAP
20 Kasım 2008, PERŞEMBE


if (RectA.Left < RectB.Right && RectA.Right > RectB.Left &&
    RectA.Bottom < RectB.Top && RectA.Top > RectB.Bottom) 

ya da, Cartesion koordinatları kullanarak...

if (RectA.X1 < RectB.X2 && RectA.X2 > RectB.X1 &&
    RectA.Y1 < RectB.Y2 && RectA.Y2 > RectB.Y1) 

Bir Rect, Rect B. söyleyin Kanıt çelişki. Dört koşullardan biri olduğunu garanti ederhayır yok örtüşüyor:

  • Cond1. Eğer Bir sol kenar B sağ kenar sağ ise, - o zaman Tamamen B Sağ
  • Cond2. Eğer Bir sağ kenar B sol kenarı,sol tarafında ise - o zaman Tamamen B Sol
  • Cond3. Eğer Bir üst kenarı B alt kenarına,aşağıda ise - Tamamen B aşağıda o zaman
  • Cond4. Eğer Bir alt kenarı yukarıda B üst kenarı ise, - Tamamen B yukarıdaki o zaman

Olmayan üst üste koşuludur

Cond1 Or Cond2 Or Cond3 Or Cond4

Bu nedenle, üst üste için yeterli bir koşul tersi (De Morgan)

Not Cond1 And Not Cond2 And Not Cond3 And Not Cond4

Bu eşdeğerdir:

  • Bir Sol B sağ kenar sol Kenar, ve
  • Bir Sağ B sol kenar, sağ kenar, ve
  • Bir üst yukarıda B alt ve
  • Bir alt B En aşağıda

NOT 1Bu aynı prensip boyutları herhangi bir sayı için uzatılabilir oldukça açıktır.
NOT 2: Gerektiği de oldukça açık sayısı çakışıyor sadece bir piksel değiştirme < ve/veya > O sınır için bir <= >=.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Jonathan Morrison

    Jonathan Mor

    24 Mart 2010
  • Mr_BrettHooge

    Mr_BrettHoog

    3 Ocak 2011
  • YouplusmeVEVO

    YouplusmeVEV

    4 EYLÜL 2014