Sie könnten versuchen, einen Scanline-Algorithmus zu verwenden - Für jede Linie des Polygons (also y = min (y) .. max (y)), erhalten Sie l = min (x) und r = max (x). Berechnen Sie die linke/rechte Steigung (deltax) und vergleichen Sie sie mit der Steigung der Linie davor. Wenn es sich geändert hat (verwenden Sie hier eine Toleranz), befinden Sie sich in einer Ecke des Rechtecks (oder in der Nähe davon). Das wird nicht in allen Fällen funktionieren, da die Steigung wegen der geringen Auflösung nicht genau sein kann, aber für große Rechtecke und nicht zu ähnliche Neigungen sollte dies funktionieren.
Zumindest funktioniert es gut für Ihr Beispiel:
X0000000000X l = 0, r = 11
.00000000000 l = 1, r = 11, deltaxl = 1, deltaxr = 0
..X000000000 l = 2, r = 11, deltaxl = 1, deltaxr = 0
.....0000000 l = 5, r = 11, deltaxl = 3, deltaxr = 0
........0000 l = 8, r = 11, deltaxl = 3, deltaxr = 0
...........X l = 11, r = 11, deltaxl = 3, deltaxr = 0
Sie beginnen mit der Spitze des Rechtecks in dem Sie zwei verschiedene Werte für l und r erhalten, so dass Sie bereits zwei der Ecken aufweisen. Auf der linken Seite erhalten Sie für die ersten drei Zeilen deltax = 1, aber danach erhalten Sie deltax = 3, also gibt es eine Ecke bei (3, 3). Auf der rechten Seite ändert sich nichts, deltax = 0, so dass Sie nur den Punkt am Ende erhalten.
Beachten Sie, dass Sie Ecken hier "sammeln", also, wenn Sie nicht 4 Ecken am Ende haben, waren die Neigungen zu ähnlich (oder Sie haben ein Bild von einem Dreieck) und Sie können zu einem anderen wechseln (genauer) Algorithmus oder geben Sie einfach einen Fehler. Dasselbe gilt, wenn Sie mehr als 4 Ecken oder andere seltsame Dinge wie Löcher im Rechteck haben. Es scheint, dass irgendeine Art von Bilderkennung beteiligt ist, so dass diese Fälle auftreten können, oder?
Es gibt Fälle, in denen eine einfache deltax = (x - lastx) nicht gut arbeiten, dieses Beispiel für die linke Seite eines Rechtecks sehen:
xxxxxx
xxxxx deltax = 1 dy/dx = 1/1 = 1
xxxxx deltax = 0 dy/dx = 2/1 = 2
xxxx deltax = 1 dy/dx = 3/2 = 1.5
xxxx deltax = 0 dy/dx = 4/2 = 2
xxx deltax = 1 dy/dx = 5/3 = 1.66
Manchmal deltax 0, manchmal 1 Es ist besser, die Steigung der Linie vom tatsächlichen Punkt zum oberen linken/rechten Punkt (deltay/deltax) zu verwenden. Wenn Sie es verwenden, müssen Sie immer noch mit einer Toleranz bleiben, aber Ihre Werte werden mit jeder neuen Zeile genauer.
Warum würde nicht, was Sie arbeiten? Sie müssen das wahre Maximum und das wahre Minimum finden (indem Sie alle Punkte untersuchen, die Sie haben, bevor Sie sich entscheiden, welches Maximum und welches Minimum wirklich ist), aber irgendwann werden Sie sich auf einige der Daten verlassen müssen, um es Ihnen zu sagen wie das Rechteck _should_ aussehen soll. –
Wie haben Sie die Silhouette des Rechtecks ohne Punktkoordinaten für die Ecken erhalten? – Stewbob
Ich habe ein Bild als Eingabe, mit einer Schwellenwertfunktion kann ich den interessanten Teil vom Hintergrund trennen. – dutchflyboy