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
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 <=
>=
.
Hızlı eğer bir tam sayı iki tamsayı (d...
Eğer bir öğe jQuery ile CSS sınıfı var...
Neden bu kadar asal sayının Kare kökün...
Nasıl eğer poligon noktaları listesi s...
Eğer köklü bir cihaz üzerinde çalışan ...