Angenommen, ich habe die folgenden überlappenden Rechtecke ("a" und "b"):
%Vor%Ich habe viele Ideen gesehen, wie man den Bereich des inneren Rechtecks ("c") berechnen kann, aber wie würde ich gehen, um die tatsächlichen Koordinaten oben / links / unten / rechts zu bekommen dafür?
Die X-Koordinaten des Überlappungsbereichs von zwei Rechtecken können gemäß der folgenden Logik gefunden werden.
Um die Y-Koordinaten zu finden, ersetzen Sie Y für X in der letzten der vier Annahmen sowie in allen drei Fällen.
Annahmen:
A und B sind Rechtecke (deren Seiten entlang der X- und Y-Achse ausgerichtet sind),
Jedes der Rechtecke wird durch zwei Punkte definiert ( x min / y min ) - ( x max / y max )
wobei x min & lt; x max und y min & lt; y
A.x min & lt; B.x min
Fall 1 - Keine Überschneidung:
%Vor%A.x min & lt; A.x max & lt; B.x min & lt; B.x max ⇒ Keine Überlappung.
Fall 2 - Einige Überschneidungen:
%Vor%A.x min & lt; B.x min & lt; A.x max & lt; Bx max ⇒ Überlappende X-Koordinaten: Bx min - Ax max
Fall 3 - Vollständige Überlappung:
%Vor%A.x min & lt; B.x min & lt; B.x max & lt; Ax max ⇒ Überlappende X-Koordinaten: Bx min - Bx max
PS: Sie können diesen Algorithmus tatsächlich weiter vereinfachen. Die Überlappungs-X-Koordinaten sind immer:
max ( Ax min , Bx min ) - min ( Ax max , Bx max )
, außer wenn der zweite Wert kleiner als der erste ist; das bedeutet, dass es keine Überlappung gibt.
Angenommen:
%Vor%Überlappendes Rechteck RO berechnet sich wie folgt mit C #:
%Vor%Inneres Rechteck RI:
Tausche Min und Max in der obigen Lösung für überlappendes Rechteck RO.
Ich habe einen abstrakten Validator für mein Projekt verwendet und überprüft, ob einige Layout-Steuerelemente wo Überschneidungen Ich Rechtecke aus den Layout-Figuren erstellt:
%Vor%Tags und Links c#