2008-12-11 11 views
2

Je cherche un moyen de générer un ensemble de polygones aléatoires, mais réguliers, à l'intérieur d'un rectangle ou d'un secteur de cercle donné. Pour mieux expliquer, mon espace 2d donné devrait avoir un arrangement aléatoire de polygones réguliers avec différents nombres de côtés, donc, si deux hexagones sont séparés par un rectangle de longueur égale à leurs côtés, l'espace entier ne peut pas être rempli seulement de plus. hexagones, certains triangles peuvent être nécessaires, etc.Générateur de polygone aléatoire mais régulier

Je cherche un segment d'une sorte d'effet kaléidoscope.

+0

-je interpréter correctement, dans ce que vous ne voulez pas de chevauchement ni espace vide? – Svante

+0

@Svante, oui, bien que techniquement la dernière partie de l'espace vide disponible formera automatiquement un polygone. – ProfK

Répondre

3

Une autre approche, je peux penser à: D'abord décider du nombre d'objets que vous voulez. Dites 'N'

Sélectionnez au hasard 3 points dans votre espace 2D. Utilisez 3 points pour obtenir un triangle virtuel.

Maintenant Sélectionnez un autre point de sorte que le point soit en dehors du triangle virtuel. Maintenant, formez un autre triangle virtuel en joignant ce point à 2 points du triangle virtuel précédent et ensuite formez de façon récurrente des "N" trianlges virtuels. Incase triangles virtuels croisés, puis vous ignorez le trianlge plus grand et prenez des triangles qui se sont formés à cause des points de croisement comme nouveaux triangles virtuels

Générez maintenant un cercle INSCRIT virtuellement à tous les triangles virtuels qui ne pourront jamais croiser un autre triangle virtuel puisque tous les triangles virtuels Les triangles virtuels sont formés par le fait de ne croiser aucun des triangles tels qu'expliqués ci-dessus.

Utilisez des cercles virtuels pour former un nombre quelconque de côtés réguliers en divisant 360 degrés en tranches égales. Maintenant vous pouvez dessiner des polygones réguliers aléatoires

+0

A l'origine, je ne voulais pas d'espaces entre les polygones, mais j'aime ça. L'arrière-plan pourrait être un joli dégradé ou une texture, ou quelque chose comme ça. – ProfK

2

Je ne suis pas sûr que je comprends les exigences, mais vous pouvez générer des polygones réguliers aléatoires en générant de façon aléatoire les numéros suivants:

    rayon
  • (0 à tout)
  • x et y du centre (doit être dans le rayon des bords)
  • nombre de points (3 à autre)
  • rotation (0 à 360)

à p Si vous évitez les chevauchements, vous pouvez tester chaque nouveau polygone par rapport à chaque polygone existant et rejeter le nouveau si la distance entre les centres est inférieure à la somme des rayons.

Dessiner les polygones est alors un simple exercice de trig.

+0

Oui, mais plus l'espace est plein, plus les polygones sont rejetés. – Svante

+0

Cela pourrait être correct - si un espace est suffisamment plein pour que (disons) 20 polygones aléatoires soient tous rejetés, vous pouvez décider qu'il est temps de s'arrêter. – ShreevatsaR

0

Générer N points aléatoires sur un plan et extraire la coque convexe de l'objet (c'est-à-dire, si tous les polygones doivent être convexes).

Vous pouvez rejeter trivialement avant de générer la coque convexe si l'un des points est à l'intérieur d'un autre polygone. Si ce n'est pas le cas, vous devez toujours tester le polygone généré par rapport aux autres polygones voisins. (Si vous devez le faire souvent, une structure de données spatiales est probablement quelque chose à examiner).

+0

Non, cela ne produit PAS de polygones réguliers. Il est beaucoup plus facile de générer directement des polygones réguliers, ou même des polygones convexes arbitraires, que de trouver des coques convexes. (Ce n'est pas que trouver des coques convexes est trop dur, c'est juste inutile.) – ShreevatsaR

Questions connexes