2009-11-27 1 views
5

Ich habe eine Sammlung von Punkten in einer Grafik dargestellt:Verbindungspunkte in Mathematica

alt text http://img69.imageshack.us/img69/874/plc1k1lrqynuyshgrdegvfy.jpg

Ich würde gerne wissen, ob es ein Befehl, der sie automatisch entlang der xx und yy Achse verbinden. Dies kann besser verstanden werden, wenn man das folgende Bild betrachtet: alt text http://img341.imageshack.us/img341/5926/tr53exnkpeofcuiw40koyks.jpg (Ich frage nicht, wie man den Algorithmus selbst implementiert!).

Dank

+1

Verbinden Sie sie in welcher Weise? Jeder mit jedem? Um ein Gitter zu machen? – Rook

+0

Gute Frage. Ich war nicht spezifisch genug. –

Antwort

2

Einige von dem, was Sie suchen, ist in der ComputationalGeometry Package. Insbesondere geben ConvexHull die äußeren Punkte, die im Gegenuhrzeigersinn aufgeführt sind. An diesem Punkt können Sie Line verwenden, um sie miteinander zu verbinden. Die inneren Pfade sind ein bisschen komplizierter, und ich denke nicht, dass es eine genaue Übereinstimmung gibt. Aber eine DelaunayTriangulation kommt am nächsten. Es teilt im Wesentlichen Ihre Liste von Punkten in Dreiergruppen auf. Ich kenne keine eingebaute Funktion, die es in Rechtecke zerlegen würde.

4

Ich vermute, dass die Antwort nein ist, gibt es keine solche Befehle. Es wäre interessant, etwas zu schreiben, um das zu tun, dh, bei einer Liste von Punkten, geben Sie die entsprechenden Zeilen aus. Ich denke, das wäre nur eine Frage von:

Für jede eindeutige x-Koordinate erhalten Sie die Liste der y-Koordinaten für Punkte mit dieser x-Koordinate und eine Linie von der min bis zur maximalen y-Koordinate. Dann wiederhole die y-Koordinaten.

Wenn Sie das tun, wäre es interessant, es hier als Follow-up zu buchen. Oder, wenn Sie die Frage stellen wollen, ich bin sicher, dass Sie einige nette Lösungen bekommen werden.

4

Ich stimme für dreeves' suggestion. Es verwendet keine "eingebaute" Funktion, aber es ist ein Einliner, der Funktionsprogrammierung und Niveauspezifikationen verwendet. Eine Implementierung ist:

gridify[pts : {{_?NumericQ, _?NumericQ} ...}] := 
    Map[Line, GatherBy[pts, #]& /@ {First, Last}, {2}] 
+0

Schön. Einfach und sauber. – rcollyer