2016-04-11 35 views
1

varsayalım i noktası (sol üst köşe) tarafından tanımlanan bir dikdörtgen ve böyle bir genişlik ve yükseklik (C++) sahip yan belirlenmesi dikdörtgenler çakışıyor - eğer çarpışıyorlarsa. Peki ya 'ı diğer dikdörtgenin çarptığı dikdörtgenin yanını bulmak istersem ne olur? Bunu nasıl yaparım (verimli, ama öncelikli değil)? çarpışma durumundaDikdörtgen çarpışma

+0

Dikdörtgen A tamamen dikdörtgen D olduğunda fonksiyonunuz 'true' döndürür. Hangi tarafta" çarpışırlar "? İki örtüşen kenarı olan dikdörtgenler ne olacak? – dasblinkenlight

+0

... veya bir dikdörtgenin bir köşesi diğerinin içinde, diğer üç köşesi tamamen dışarıda olduğunda. Şimdi ne olacak? –

+0

Eh, bu genellikle birbirlerini "dokunur" test etmek için genellikle. Bu benim için yeterli. Bir dikdörtgen bir başka içeride ise ve bu doğru olarak döndürürse, bu benim için kabul edilebilir. Ancak, bu tür bir dikdörtgenle, doğru çarpışmayı nasıl kontrol edebileceğimi, yani başka bir dikdörtgenle hangi tarafın çarpıştığını öğrenmek istiyorum. – calcyss

cevap

1

16 farklı varyantlar enter image description here Bu tablo var nasıl

vardır algılanır? Kırmızı rect'in sol üst köşesi için 4 farklı yer var. İlk satır, birinci varyant, ikinci satır - ikinci varyant ve benzerleridir. Ayrıca 4 fark vardır. Kırmızı rectin sağ alt köşesi için yerler. Ayrıca her bir varyantı ayrı bir sütuna koyuyorum.
Örneğin, bilmek istediğimiz (* bu) üst tarafının (kırmızı olsun) _rect ile çarpışması (mavi olsun). Bu varyantlar 9,10,11,12,14,16 için geçerlidir. Durum
(_rect.Y < Y < _rect.Y + _rect.Height) && (X < _rect.X || X + Width > _rect.X + _rect.Width)

+0

Lütfen bireysel vakalara numara ekleyebilir misiniz? numaralandırma düzeninizi tam anlamıyorum, cevabınız için teşekkürler! – calcyss

+0

@calcyss İlk satırdaki varyasyonlar 1,2,3,4; ikinci üzerinde - 5,6,7,8 abd – Pavel