2009-11-27 4 views
5

j'ai une collection de points affichés dans un graphique:Connexion points dans Mathematica

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

J'aimerais savoir s'il y a une commande qui les connecte automatiquement le long du xx et axe yy. Cela peut être mieux compris en regardant l'image suivante: alt text http://img341.imageshack.us/img341/5926/tr53exnkpeofcuiw40koyks.jpg (Je ne demande pas comment implémenter l'algorithme moi-même!).

Merci

+1

Connectez-les de quelle façon? Tous avec tous? Pour faire une grille? – Rook

+0

Bonne question. Je n'étais pas assez précis. –

Répondre

2

Une partie de ce que vous recherchez est dans le ComputationalGeometry Package. En particulier, ConvexHull vous donnera les points externes énumérés dans le sens antihoraire. À ce stade, vous pouvez utiliser Line pour les connecter ensemble. Les chemins internes sont un peu plus compliqués, et je ne pense pas qu'il y ait une correspondance exacte. Mais, un DelaunayTriangulation se rapproche le plus. Il casse essentiellement votre liste de points en ensembles de triangles. Je ne connais pas de fonction intégrée qui le diviserait en rectangles, cependant.

4

Je soupçonne que la réponse est non, il n'y a pas une telle commande. Il serait intéressant d'écrire quelque chose à faire, c'est-à-dire, en donnant une liste de points, sortir les lignes correspondantes. Je suppose que ce serait juste une question de:

Pour chaque coordonnée x unique obtenir la liste des coordonnées y pour les points avec cette abscisse et faire une ligne de la min à la coordonnée y max. Puis répétez pour les coordonnées y.

Si vous faites cela, il serait intéressant de l'afficher ici comme un suivi. Ou si vous voulez faire cette question, je suis sûr que vous aurez de bonnes solutions.

4

Je vote pour dreeves' suggestion. Il n'utilise pas de fonction "intégrée", mais il s'agit d'une ligne unique utilisant la programmation fonctionnelle et les spécifications de niveau. Une implémentation est:

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

Nice. Simple et propre. – rcollyer