Düzenleme:Bulma (C#) İki dikdörtgenin örtüşen alan
Kimseye ilgi (Fredrik sayesinde) olması durumunda sorunun çözümü için kullanılanBasit kodu:
int windowOverlap(Rectangle rect1, Rectangle rect2)
{
if (rect1.IntersectsWith(rect2))
{
Rectangle overlap = Rectangle.Intersect(rect1, rect2);
if (overlap.IsEmpty)
return overlap.Width * overlap.Height;
}
return 0;
}
Orijinal Soru:
İki dikdörtgenin örtüşüp örtüşmediğini ve çakışma alanını hesaplayıp hesaplamadığını hızlı ve kirli bir şekilde öğrenmek istiyorum. Meraklısına aşkına ben hem dikdörtgenler 1) Tüm hatlar herhangi iki dikdörtgen için ya dikey ya da yatay veya 2) genel durum olması durumunda ilgileniyorum, ama gerçekten gerek tek cevap vaka 1.
olduğunu A.Intersects için
double areaOfOverlap(Rect A, Rect B)
{
if (A.Intersects(B))
{
// calculate area
// return area
}
return 0;
}
() Ben ayıran eksen testi kullanılarak düşünme, ama dikdörtgenler yalnızca yatay ve dikey çizgiler varsa daha basit (hızlı) vardır: Ben çizgisinde düşünüyorum kontrol yolu?
Ve kesiştiği alanı hesaplamak için dikdörtgenler sadece yatay ve dikey çizgiler varsa bunu yapmak için hızlı bir yol var mı?
Son olarak, bu soruyla ilgili değil, ancak bilgisayar grafikleri için matematiği inceleyebildiğim iyi bir kitap/web sayfasındaki herhangi bir tavsiyeyi takdir ediyorum. Bir süredir kolejden çıktım ve herşeyi unutuyorum gibi hissediyorum :)! Bu sorunu yaşayan başkası var mı?
(NOT:. Ben daha karmaşık görünüyor ve doğrudan soruya cevap vermez this farklı bu soruyu bulundu) iş yapmak Rectangle.Intersect
yöntemi Belki
yatay dikdörtgen dikey dikdörtgen olan tarafı bağlıdır Eğer
düzenlemek Mike
this page on Wikipedia?baktınız mı –
** (overlap.Ismpmp) ** ** olmalıdır. ** (! overlap.IsEmpty) ** – ReinierDG