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 <=
>=
.
Neden bu kadar asal sayının Kare kökün...
Eğer bir uygulama olup olmadığını beli...
Eğer dize JavaScript listesinde olup o...
Hızlı eğer bir tam sayı iki tamsayı (d...
Eğer kodu birim testinin bir parçası o...