Edit:Znalezienie pokrywają obszar dwóch prostokątów (w C#)
Prosty kod użyłem, aby rozwiązać problem w przypadku gdy ktoś jest zainteresowany (dzięki Fredrik):
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;
}
oryginalne pytanie:
Chciałbym poznać szybki i brudny sposób sprawdzenia, czy dwa prostokąty zachodzą na siebie i czy obliczyć obszar nakładania się. Dla ciekawostek interesuje mnie przypadek, w którym 1) wszystkie linie w obu prostokątach są pionowe lub poziome lub 2) ogólny przypadek dla dwóch dowolnych prostokątów, ale jedyną odpowiedzią, której naprawdę potrzebuję, jest przypadek 1.
Zastanawiam się wzdłuż linii:
double areaOfOverlap(Rect A, Rect B)
{
if (A.Intersects(B))
{
// calculate area
// return area
}
return 0;
}
Dla A.Intersects() myślałem o użyciu testu oddzielającą oś, ale jeśli prostokąty mają tylko linie poziome i pionowe tam jest jeszcze prostsze (szybciej) sposób sprawdzić?
A do obliczenia obszaru, w którym przecinają się, jest szybki sposób, aby to zrobić, jeśli prostokąty tylko linie poziome i pionowe?
Wreszcie, nie ma to związku z pytaniem, ale byłbym wdzięczny za radę, jaką ktoś może mieć na dobrej książce/stronie internetowej, na której mógłbym przejrzeć matematykę dotyczącą grafiki komputerowej. Jestem na studiach przez jakiś czas i czuję, że zapominam o wszystkim :)! Ktoś jeszcze ma ten problem?
(UWAGA: Znalazłem to pytanie innego niż this który wydaje się bardziej skomplikowana i nie bezpośrednio odpowiedzieć na pytanie.)
Pozioma prostokąt pionowy prostokąt, zależy po której stronie za –
** (overlap.IsEmpty) ** powinien być ** jeśli (! overlap.IsEmpty) ** – ReinierDG