2009-08-19 4 views
4

Ich muss das minimale Bereichsrechteck (kleinstmögliches Rechteck) um das Polygon berechnen.Berechne minimales Bereichsrechteck für ein Polygon

Der einzige Eingang, den ich habe, ist die Anzahl der Punkte im Polygon.

Ich habe die Koordinaten der Punkte auch.

+1

Nur Anzahl der Punkte? oder haben Sie auch die Koordinaten? – Naveen

+0

ist es eine regelmäßige Form? – nickf

+4

Ist das Polygon in einer beliebigen Ausrichtung oder muss das Rechteck orthogonal zum Koordinatensystem sein? –

Antwort

5

Verwenden Sie den rotating calipers Algorithmus für ein konvexes Polygon oder andernfalls die konvexe Hülle. Sie benötigen natürlich die Koordinaten der Punkte im Polygon, nicht nur die Anzahl der Punkte.

+0

Ich denke, es wird mir helfen .. genauer gesagt muss ich die Breite und Länge von Polygon berechnen !!! – Samra

+1

Das ist kein Problem: Wenn Sie den Algorithmus anwenden, berechnen Sie die Breite und Länge eines Bounding Boxes, das an jede Kante der Reihe nach ausgerichtet ist. – p00ya

-2

Offensichtlich benötigen Sie die Koordinaten der Punkte, um die Antwort zu erhalten. Wenn das Rechteck mit den Assen X und Y ausgerichtet ist, ist die Lösung trivial. Wenn Sie ein möglichst kleines Rechteck in einem beliebigen Winkel haben möchten, müssen Sie einen Optimierungsprozess durchführen.

+0

10 danke für deine kommentar Ja ich brauche die rectanle in jedem beliebigen winkel. Könnten Sie bitte aufwendige Optimierung Prozess – Samra

+0

Mehrere Leute haben bereits erwähnt, die rotierenden Bremssättel Algorithmus. So wird es gemacht.Sie tun das Äquivalent der grundlegenden Min/Max-Begrenzungsbox, aber mit dem Koordinatensystem, das um den Winkel jeder der Seiten gedreht ist. –

7

Dies nennt man Minimum Bounding Box, es ist der grundlegendste Algorithmus, der in OCR-Paketen verwendet wird. Sie finden eine Implementierung mit rotierenden Schieblehren aus dem Paket. Sobald Sie den Quellcode erhalten, überprüfen Sie diese Datei aus,

cv/src/cvrotcalipers.cpp 

Die Methode cvMinAreaRect2() ist benötigen.

+0

Ich kann die Methode nicht finden. Kannst du mir das genaue dafür geben danke – Samra

+0

Es ist hier http://www.google.com/codesearch/p?hl=de&sa=N&cd=1&ct=rc#WMkTvnMDpLM/cv/src/cvrotcalipers.cpp&q=cvMinAreaRect2 –

0

Folgen Sie den folgenden Algorithmus

  1. Drehen des Polygons auf die XY-Ebene verwenden
  2. 1 Rand-Auswahl und diese Kante ausrichten mit der X-Achse (Verwendung arctan). Verwenden Sie das Minimum/Maximum x, y, um das Begrenzungsrechteck zu finden. Bereich berechnen und in der Liste speichern
  3. Wiederholen Sie dies für die verbleibenden Kanten im ausgeschnittenen Polygon.
  4. Wählen Sie das Rechteck mit der Mindestfläche aus.
  5. Drehen Bounding Rechteck zurück für Coplanar Rückwärtsdrehung von Stufe 1 und Stufe 2

für weitere Einzelheiten Check Link Minimum-Area-Rectangle

Verwandte Themen