2009-11-05 3 views
0

. . Salut à tous.Algorithme pour positionner des objets rectangulaires et de taille aléatoire à l'intérieur d'un canevas non rectangulaire

. . J'ai une toile définie par de nombreux points (x, y) - ce n'est pas rectangulaire, mais au moins il suivra une forme presque hexagonale (comme un hexagone déformé, avec des angles qui sont toujours à 180 degrés). J'ai aussi une grande collection de différents rectangles (plus ou moins 140 d'entre eux, avec des largeurs et des hauteurs différentes) et j'ai besoin de les positionner à l'intérieur de la forme. Ils doivent être positionnés comme s'ils étaient poussés par la gravité (je veux dire ... le haut de la forme n'a pas besoin d'être rempli, mais le fond a besoin). . . Pour l'instant, ma seule idée est de stocker la position "x" min et max pour chaque position "y" (quelque chose comme: limits [300] = [30,30], limites [299] = [29, 32]; .), parcourez les rectangles, obtenez leur surface et comparez les valeurs pour trouver la meilleure position. Le plus important que j'ai en ce moment, c'est qu'ils doivent être organisés de façon «organique», pas comme une table (je ne peux pas avoir des rangées et des colonnes et les positionner à l'intérieur des cellules. être, comme fluide, côte à côte, l'un au-dessus de l'autre ...). Je ne suis pas sûr de savoir comment gérer le positionnement. . . Je connais quelques bons exemples d'objets "auto-équilibrés" (un bon exemple est l'expérience Chrome "Ball Pool": http://mrdoob.com/projects/chromeexperiments/ball_pool/), mais ils utilisent des objets rectangulaires et des objets circulaires, qui sont beaucoup plus faciles à comparer. . . Maintenant, ma meilleure idée est de vérifier les objets pour chaque combinaison x/y possible, de bas en haut, de gauche à droite, en vérifiant si une zone se chevaucherait, mais cela bloquerait probablement tout l'ordinateur pour les calculs pendant quelques minutes. plus d'itens sur l'écran, plus de calculs seraient nécessaires).

. . Le projet fonctionne sur Flash, mais tout exemple, conseil, algorithme, papier ou pseudo-code sera d'une grande aide.

Répondre

0

Je pense que vous pouvez tout faire en utilisant une simulation physique. Cela peut sembler compliqué, mais ce n'est pas aussi dur que ça en a l'air. Il existe plusieurs API de physique pour ActionScript 3. J'ai utilisé le as3 port of Box2D et je suis assez content des résultats.

La façon dont j'irais à ce sujet est:

  • définissent des formes pour les murs (les lignes qui rendent votre forme polygonale)
  • définissent les boîtes (rectangles)
  • créer les corps de physique avec les informations appropriées sur les objets d'affichage (identifiant de liaison, etc.)
  • Ajoutez-les au monde de la physique et simulez.

Je ne sais pas ce que votre expérience avec actionscript 3 est, mais un coup d'oeil à la World Construction Kit. Cela devrait vous permettre de vous mettre en route rapidement.

Questions connexes