Eğer iki dikdörtgen çakışıyorsa belirlemek? | Netgez.com
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

  • Branboy3

    Branboy3

    12 AÄžUSTOS 2012
  • Electro Posé

    Electro PosÃ

    21 ÅžUBAT 2013
  • World Science Festival

    World Scienc

    1 Mayıs 2008