6
votes

Comment générer ce genre de courbes aléatoires?

est-il possible de générer ce type de courbes aléatoires?

Entrez la description de l'image ici

J'ai essayé Imagick Bezier Courbes (voir http: // www.php.net/manual/fr/function.imagickdraw-bezier.php ), mais même avec 20-30 points, ils ne ressemblent pas à cela. Voici mon échantillon http://mechanicalzilla.com/sandbox/imagick/curve.php

merci.


1 commentaires

Vous aurez besoin de beaucoup de points, dispersés autour du tableau.


4 Réponses :


5
votes

Je parie que vous pouvez écrire un algorithme qui prendrait essentiellement x de rebondissements aléatoires avant d'aller directement sur les coordonnées de sortie. Cela suppose également que l'algorithme est suffisamment intelligent pour vérifier l'angle du virage. (en supposant que vous ne voulez pas courir dans Knot-web)

Cependant, en supposant que ce n'est pas votre tâche de remise des diplômes ou que vous êtes payé à l'heure de travailler à ce sujet, ce serait une perte de temps et de succès est très douteux.

Même si vous parveniez à générer un algorithme de ligne unique, ce faisant que les lignes ne soient pas trop proches les unes des autres sont proches de l'impossible. Vous finirez avec quelque chose comme ceci: nœud-web


0 commentaires

4
votes

ressemble à: xxx

Entrez la description de l'image ici


0 commentaires

4
votes

C'est loin d'une réponse complète, mais dans mon esprit, on dirait que cela pourrait vous aider:

Au lieu de dessiner des courbes du début au point final de la ligne entière, envisagez de subdiviser votre carte dans une grille espacée uniformément. Chaque carré d'une colonne de la grille a le droit d'avoir un point d'une courbe dedans, et vous avancez régulièrement de gauche à droite (au début? Pour la simplicité.).

Le hasard entrerait en jeu en cueillant un carré pour une courbe - pour l'empêcher de devenir trop chaotique, vous pourriez donner des limites de ce hasard, disons: "Vous n'êtes pas autorisé à choisir un carré (si une distance de carré à carré est considéré comme étant considéré 1 ) viole ABS (position verticale actuelle - une nouvelle position verticale) <= 5 Sauf si aucun n'est plus gratuit à ce stade "ou une autre contrainte arbitraire . ("Sauf si aucun tel n'est plus libre à ce stade" est important, sinon il est possible de vous enfermer dans un état insoluble.)

deux exemples de courbes générées de cette façon.

(Désolé, des courbes de dessin avec ma souris -> pire / pas d'interpolation de toutefois. L'interpolation de Catmull-rom sera probablement votre ami ici, cependant, j'imagine.)

L'affichage doit être suffisamment lâche étant suffisamment lâche que vos points de courbe ne peuvent pas se disperser arbitrairement, mais il est probablement très difficile d'obtenir la courbe de se connecter au point de fin "fluide" - pourrait être Une bonne solution si cela ne me dérange pas de points finaux arbitraires, l'algorithme peut décider pour lui-même où il veut que la ligne se termine.

pense que cette idée pourrait vous aider avec vos courbes?


2 commentaires

Merci très bonne idée avec des carrés, mais il y a beaucoup à faire avec le lissage, etc. Quoi qu'il en soit, merci pour votre temps!


@Kirzilla: volontiers. Pouvez-vous me dire ce que vous voulez dire avec 'mais il y a beaucoup à faire avec le lissage, etc., peut-être que je peux aider?



0
votes

Un moyen d'aborder cela serait de générer d'abord un ensemble de courbes aléatoires, puis utilisez un solveur de physique pour appliquer des forces de repulsion entre elles pour éviter de grumes.

Voici une preuve de concept rapide:

 courbes de nouilles

J'ai créé ceci en utilisant un outil très niche (pour toute personne intéressée: solveur de physique kangourou < / a>, un plugin pour sauterelle, langue de script visuelle pour rhinoceros3d ) mais vous pouvez probablement recréer le même concept dans tout langage de programmation grand public, par exemple. Python.


0 commentaires