Übersetzen des konkaven Rumpfalgorithmus in c #

8

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:

%Vor%

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%     
FabianCook 06.05.2013, 21:24
quelle

4 Antworten

3

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:

%Vor%

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.

%Vor%

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:

%Vor%

Die ersten beiden Zeilen stellen sicher, dass die Winkel nicht mehr als 180 Grad voneinander entfernt sind.

    
Jordan Trudgett 14.05.2013, 08:50
quelle
2

Sie haben einen Fehler in

%Vor%

Je nach Code, wenn Sie mehrere Scheitelpunkte in derselben Entfernung haben, gibt die Funktion nur einen zurück. Da Dictionary eindeutige Schlüssel verwendet.

BTW, hat jemand das fertig?

    
nredko 19.07.2013 13:46
quelle
0

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.

    
David Cummins 06.05.2013 22:27
quelle
0

Was ist damit?

%Vor%     
GeoGecco 17.07.2015 10:40
quelle

Tags und Links