IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Algorithmes et structures de données Discussion :

[Algorithme] Optimiser l'espace entre des blocs


Sujet :

Algorithmes et structures de données

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 15
    Points : 11
    Points
    11
    Par défaut [Algorithme] Optimiser l'espace entre des blocs
    Bonjour à tous !

    Je suis en train de développer un site internet censé afficher des blocs (dont on connait la taille) dynamiquement, chaque bloc pouvant avoir un lien avec d'autres blocs (liens schématisés par des flèches). Mon souci est simplement de savoir s'il existe un algorithme permettant d'optimiser l'espace entre les blocs afin qu'ils soient à une distance optimale entre eux (plutôt proches les uns des autres), tout en prenant compte de l'existence des flèches (donc deux blocs liés devraient être plus proches l'un de l'autre, en tout cas quand c'est possible). Le nombre de blocs varient, mais disons qu'il ne sera jamais supérieur à quelques dizaines.

    Voici un exemple qui, j'espère, sera un minimum clair :
    Nom : exemple stupide projet.png
Affichages : 280
Taille : 8,7 Ko

    Donc en gros, il y aura toujours un bloc "central", et les autres viendront se greffer tout autour de lui, sachant qu'ils peuvent aussi se greffer à d'autres blocs voire ne pas se greffer nécessairement au bloc "central". La question qui se pose est la suivante : comment coder un algo qui permette de déterminer la position optimale des différents blocs, en tenant compte des relations des uns et des autres entre eux et sans trop s'éloigner non plus ? Des idées ?

    Merci d'avance pour ceux qui se casseront la tête avec et pour moi !

    Belle journée à tous.

  2. #2
    Expert confirmé Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Points : 5 485
    Points
    5 485
    Par défaut
    Bonjour, voilà un problème intéressant.

    J'aurais procédé de la façon suivante :
    * On souhaite obtenir un cercle laissant 20% du périmètre découvert. On procède par dichotomie en faisant varier le rayon du cercle.
    * Pour chaque cercle donné on cherche à le remplir dans le sens des aiguilles d'une montre sans laisser aucun espace entre les objets.
    * On utilise pour ça un algorithme "best fit" : le prochain élément est l'élément qui épouse au mieux le cercle.
    * L'élément qui épouse au mieux le cercle est déterminé en calculant le rapport entre la surface du rectangle et celle du segment circulaire qu'il contient.
    * Chaque rectangle est testé sur quatre axes (accolé sur chacun des quatre côtés du précédent rectangle), et la position idéale sur chaque axe est calculée grâce aux points d’intersection du cercle et du rectangle. Il faut aussi vérifier à chaque fois la non-intersection avec les autres rectangles.
    * Une fois tous les éléments placés le long du périmètre on mesure la fraction du périmètre découverte.

    Une fois déterminé le rayon idéal, on refait tourner l'algorithme best fit en introduisant cette fois après chaque élément un espace proportionnel à la longueur de l'arc couvert par le précédent rectangle. On peut éventuellement tester toutes les permutations pour les petits n, avec l'adéquation au cercle pour critère de sélection.

    Complexité : O(ln(n) * n^3)

Discussions similaires

  1. Réponses: 3
    Dernier message: 19/07/2010, 14h18
  2. Comment ajouter un espace entre des AccordionHeader?
    Par 123quatre dans le forum Flex
    Réponses: 1
    Dernier message: 22/04/2010, 23h01
  3. Suppression d'espaces entre des chiffres
    Par rambc dans le forum Général Python
    Réponses: 7
    Dernier message: 20/11/2008, 22h37
  4. Définir des relations entre des blocs de données
    Par jeunot0108 dans le forum Forms
    Réponses: 7
    Dernier message: 18/07/2007, 14h56
  5. Espacement entre des <div> générés en PHP
    Par VincentG dans le forum Mise en page CSS
    Réponses: 6
    Dernier message: 07/04/2007, 20h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo