2016-04-05 5 views
0

Ich habe eine Reihe von Koordinaten in einem 3D-System, die Punkte werden zufällig generiert. Ich habe versucht, sie basierend auf ihrer Position in Room, ohne irgendein Zeichen von enter image description here Erfolg zu bestellen.Bestellung einer Menge von Punkten im 3D-Raum

was ich tun möchte, ist eine Bestellung zu erhalten, die mehr wie eine Helix aussieht.

enter image description here

Ich habe versucht, die X, Y und Z die, um zu bestellen, die Helix-Kurve zu erhalten, aber das Ergebnis war noch schlimmer, in dem Bild, das Sie Punkt Nr 29 in der falschen Position sehen können!

kann mir hier jemand einen Tipp geben, wie ich sie bestellen kann. PS: die Menge der Punkte kann geändert werden, ich brauche eine Logik hinter der Bestellung + Ich frage nicht nach Code !!

danke im voraus!

Antwort

1

Hier ist mein Vorschlag. Es ist nicht perfekt, aber Sie werden wahrscheinlich keine perfekte Lösung für dieses Problem finden:

Teilen Sie die Z-Achse in eine Anzahl von Intervallen, z. [0,4 [, [4,8 [, ...

Ordnen Sie die Punkte zuerst nach dem Intervall, zu dem ihre Z-Koordinate gehört.

Innerhalb jedes Intervalls nach dem Drehwinkel um die Z-Achse sortieren, der in den meisten Sprachen durch atan2(Y,X) berechnet werden kann. Grundsätzlich verwenden Sie zylindrische Koordinaten.

+0

danke Frank für deine Antwort! Ich werde es versuchen! – Engine

0
  1. Koordinatensystem

    Sie nicht angeben, welche Achse ist, die so für die folgende ich nehme an, die Helixachse parallel zu Z Achse, die in Ihrem Helix Diagramm nach oben zeigt.

  2. sortieren die Punkte durch Z aufsteigend koordinieren

  3. Suche Helixachse

    Diese heikel ist und hängt von vielen Dingen wie ist Ihr Helix schief, gibt es Lärm Punkte, wie dicht sind die verteilten Punkte usw. Der einfachste Weg besteht darin, die Begrenzungsbox von allen Punkten (oder nur dem lokalen Bereich) zu erhalten, und die Achse befindet sich in der Mitte. Also, wenn Feld (xmin,ymin,zmin,xmax,ymax,zmax) ist begrenzt dann würde die Mittelachsenlinie senkrecht zur Z Achse:

    x0=0.5*(xmin+xmax) 
    y0=0.5*(ymin+ymax) 
    z0=<zmin,zmax> 
    

    Wenn Sie etwas anspruchsvollere sehen

  4. sortieren Punkte Polarwinkel

    Also alle Punkte verarbeiten.finden Punkte mit dem gleichen Z koordinieren und berechnen ihre Polarwinkel a um das Zentrum (x0,y0)

    a(i)=atan2(y(i)-y0,x(i)-x0) 
    

    Jetzt aufsteigend sortieren sie oder absteigend (hängt davon ab, welche Ausgabe Sie benötigen CW/CCW). Wenn Sie alle Punkte für die gleiche Z Achse sortiert haben, sollte der ganze Satz Helix bestellt werden.

    Wenn Ihre Punkte laut sind, dann schließen Sie die Z Koordinate statt derselben. Und möglicherweise fügen Sie verbundene Komponenten-Analyse hinzu, um die Reihenfolge anzupassen.

Verwandte Themen