Может кто-нибудь объяснить, почему отрицательный размер Rectangle пересекается так, как они делают?
var r = new Rectangle(0, 0, 3, 3);
var r0 = new Rectangle(0, 0, -1, -1);
var r1 = new Rectangle(1, 1, -1, -1);
var r2 = new Rectangle(2, 2, -1, -1);
var r3 = new Rectangle(3, 3, -1, -1);
System.Console.WriteLine(r.IntersectsWith(r0)); // False
System.Console.WriteLine(r.IntersectsWith(r1)); // False
System.Console.WriteLine(r.IntersectsWith(r2)); // True
System.Console.WriteLine(r.IntersectsWith(r3)); // False
Я бы подумал, что r1 и r2 должны всегда пересекаться с r, даже если они этого не делают. r3 должен пересекаться, если вы считаете их отрицательный размер. Если отрицательные размеры не учитываются, r0 должен пересекаться.
Почему это работает так, как это делается, и какие другие оговорки я должен искать при работе с структурами Rectangle?