Ich versuche also, den hier gefundenen Algorithmus für konkave Hüllen zu übersetzen: Ссылка
(Seite 65)
Ich habe die ganze Sache durchgelesen, aber ich kann nicht herausfinden, wie man sortByAngle
und angle
implementiert, ich bin nicht sicher, welche Methode ich in ihnen machen soll. Das habe ich bisher:
Ich weiß, dass hier eine Menge Code steckt. Aber ich bin nicht sicher, ob ich den Kontext zeigen kann und was ich ohne es habe.
Andere Klassen:
%Vor% Nur eine Anmerkung zur Konvention: Sie sollten Funktionsnamen mit Großbuchstaben und Variablen mit Kleinbuchstaben beginnen. In der Funktion sortByAngle
haben Sie gleichzeitig einen Verweis auf den Parameter angle
und die Funktion angle
.
Angenommen, Angle(...)
soll einfach den Winkel zwischen zwei Punkten berechnen:
gibt Ihnen den Winkel von v1
bis v2
im Bogenmaß zwischen -pi und + pi. Mischen Sie nicht Grad und Bogenmaß. Mein Vorschlag ist, immer Radiant zu verwenden, und nur in Grad umwandeln, wenn es für menschenlesbare Ausgabe notwendig ist.
verwendet List.Sort
, um die Scheitelpunkte von der größten zur kleinsten Winkeldifferenz zwischen den Scheitelpunkten point
und sich selbst und angle
zu sortieren. Die Reihenfolge von v1
und v2
wird im Eingabetupel getauscht, um absteigend sortiert zu werden, dh die größte Differenz zuerst. Der Unterschied zwischen Winkeln wird wie folgt berechnet:
Die ersten beiden Zeilen stellen sicher, dass die Winkel nicht mehr als 180 Grad voneinander entfernt sind.
Ich habe momentan nicht die Zeit, um die Zeitung zu lesen, aber ich gehe davon aus, dass Sie mit den conVEX-Hüllenalgorithmen die Punkte in einer bestimmten Richtung durchgehen und nach dem nächsten Punkt suchen, zu dem Sie verlinken können. p>
Wenn das der Fall ist, wäre "angle" der Winkel des letzten Liniensegments des Rumpfes und Sie möchten die Punkte nach ihrem Winkel von dieser Linie aus sortieren. Daher möchten Sie die Winkel zwischen einer Linie (am Rumpf) und einer Reihe von Linien (vom aktuellen Punkt zum jeweils betrachteten Punkt) berechnen. Ob die berechneten Winkel positiv oder negativ sind, hängt davon ab, ob Sie im Uhrzeigersinn oder gegen den Uhrzeigersinn drehen. Um die Winkel zu berechnen, sieh dir folgendes an:
Berechnung des Winkels zwischen zwei Linien ohne die Steigung berechnen zu müssen? (Java)
Dann sortiere einfach nach den Winkeln.
Tags und Links c# geometry concave-hull