Definition : Ein Polygon in der Ebene heißt monoton in Bezug auf eine Gerade L , wenn jede zu L orthogonale Linie P höchstens zweimal schneidet .
Ist es möglich, bei gegebenem Polygon zu bestimmen, ob irgendeine Linie L existiert, so dass das Polygon P in Bezug auf L monoton ist ? Wenn ja, wie?
Früher fragte ich eine ähnliche Frage (wo ich gefragt , wie zu bestimmen , ob ein Polygon monoton in Bezug auf eine bestimmte Linie ist), aber jetzt bin ich in dem Fall interessiert , wenn ist nicht gegeben oder im Voraus festgelegt.
Antworten:
Es ist möglich.
Betrachten Sie Ihr Polygon und die "konkaven" Eckpunkte. Sie definieren genau, welche Linien das Polygon mehr als zweimal schneiden. In der folgenden Abbildung habe ich die Intervalle (in rot) der verbotenen Winkel markiert. Wenn Sie sie zusammenfügen und ein Loch in der roten Scheibe sehen, gibt es zulässige Winkel (in blau). Das Polygon ist dann in Bezug auf jede Steigungslinie eintönig - 1 / tan δ (in Grün).δ −1/tanδ
Nun der Algorithmus.
atan2
Kehre die Reihenfolge der Eckpunkte um, wenn sie nicht im Gegenuhrzeigersinn liegen, dh wenns=∑iβi−nπ s=−2π s=2π
Das Folgende gilt nur für die Innenwinkel, die größer als sind, . Die roten auf meinem Bild. Ziel ist es, einen Winkel zu finden , der nicht in modulo . Nämlich so, dass für alle so, dass :m π βj>π δ ∪j[αj+1,αj] π j βj>π
wobei hier der normalisierte Wert von in . Der zweite Fall entspricht einem Intervall, das über hinausgeht (also muss diese Zeit "innen" sein).αj αj [0,π) π δ
Es gibt wahrscheinlich einen schnelleren Weg, dies zu tun, aber einer in besteht darin, die Werte in zu und auf zu testen. .α j mod π γ 1 , … γ m δ ∈ { γ 1O(n2) αj mod π γ1,…γm δ∈{γ12,γ1+γ22,…,γm−1+γm2,γm+π2}
Wenn Sie etwas dann existiert und hat eine Steigung von . Ansonsten ist nicht eintönig. L - 1 / tan δ Pδ L −1/tanδ P
quelle