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 :

Soustraction de rectangles


Sujet :

Algorithmes et structures de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Lycéen
    Inscrit en
    Septembre 2013
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Septembre 2013
    Messages : 25
    Par défaut Soustraction de rectangles
    Bonjour
    J'ai un grand rectangle à afficher dans lequel je dois enlever 2 ou 3 rectangles (qui ne peuvent pas sortir du rectangle initial mais peuvent venir jusqu'au bord). J'aimerais donc afficher l'ensemble des rectangles qui constituent cette soustraction des 2 ou 3 rectangles du premier.
    Existe-t-il un algorithme pour ça et, si possible une implémentation (idéalement en C, mais bon...)?
    Merci
    David

  2. #2
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 703
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 703
    Par défaut
    Citation Envoyé par zedrummer Voir le message
    l'ensemble des rectangles qui constituent cette soustraction des 2 ou 3 rectangles du premier.
    vous voulez dire que vous voulez le résultat de la soustraction sous forme d'un ensemble de rectangles ?
    est ce que ces rectangles peuvent se superposer ?

  3. #3
    Membre averti
    Homme Profil pro
    Lycéen
    Inscrit en
    Septembre 2013
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Septembre 2013
    Messages : 25
    Par défaut
    Oui c'est ça, je veux un ensemble de rectangles.
    Non il ne faut d'overlapping.

  4. #4
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2018
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juillet 2018
    Messages : 104
    Par défaut
    Bonjour zedrummer,

    Voici ma proposition de solution. Il y a sûrement plus performant, mais elle me semble relativement simple.
    • Diviser l'espace selon des abscisses et ordonnées correspondantes à toutes les côtés de rectangle respectivement verticaux et horizontaux
    • Créer un tableau indiquant si oui ou non chaque cellule subdivisée est occupée par un rectangle à soustraire (en rouge).
    • On crée les rectangles du résultat
      • Si on ne cherche pas à avoir le minimum de rectangle en résultat, on peut considérer un rectangle pour chaque cellule non occupée (en bleu)
      • Si on veut limiter le nombre de rectangle, il faut fusionner les cellules non occupées. Un algorithme "glouton" devrait faire l'affaire, ie on prend un rectangle non occupé, et on cherche à l'étendre au maximum dans les 4 directions successivement. A noter que cela ne donnera pas nécessairement le nombre minimal de rectangles, mais c'est à toi de voir selon ton besoin.

    Nom : rectangleSoustraction.png
Affichages : 209
Taille : 17,4 Ko

  5. #5
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 243
    Par défaut
    @zedrummer

    Commençons par le cas le plus simple : on a un rectangle (100,200) par exemple, et on enlève un carré (10,10) qui touche un des 4 coins.
    On voit que la surface restante peut être écrite comme somme de 2 rectangles, de 2 façons différentes. Ou elle peut aussi être écrite comme somme de 3 rectangles, d'une façon assez logique.
    Tu n'as pas du tout évoqué dans ton message qu'il y avait plusieurs solutions.

    Si on prend le dessin proposé par AbsoluteLogic, on constate (sauf erreur de ma part) qu'on peut trouver 9 rectangles qui vont convenir et qu'il y a plusieurs solutions qui aboutissent à 9 rectangles, mais qu'il n'y a aucune solution avec 8 rectangles.
    Est-ce que tu veux une solution optimale (9 rectangles), ou bien une solution avec 10 ou 12 rectangles te convient ?
    Il y a une solution avec 12 rectangles qui est très facile à obtenir : on garde TOUTES les lignes pointillées horizontales du dessin, et on supprime les lignes pointillées verticales.

    Pourquoi c'est à 'nous' de poser ces questions ? Pourquoi tu n'as pas précisé tout ça dans ton premier message ?

  6. #6
    Membre averti
    Homme Profil pro
    Lycéen
    Inscrit en
    Septembre 2013
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Septembre 2013
    Messages : 25
    Par défaut
    Déjà merci à vous de prendre sur votre temps.
    Désolé s'il n'y avait pas toutes les réponses dans mes premiers messages, mais effectivement, la seule info qui manquait était qu'il ne faut pas d'overlapping.
    Après qu'il y ait 9 ou 12 rectangles, ce n'est pas très grave, je dessine avec OpenGL, ça ne fera aucune différence. Je n'avais donc pas considéré ça comme une indication importante, désolé.
    Je vais bien étudier votre réponse commune, merci bien.
    David

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Soustraction d'ensembles
    Par Guizz dans le forum MS SQL Server
    Réponses: 18
    Dernier message: 05/05/2006, 13h37
  2. [MFC]Ecrire du texte dans un rectangle
    Par zaz16 dans le forum MFC
    Réponses: 8
    Dernier message: 29/07/2003, 11h31
  3. Comment centrer un Texte dans un rectangle ...
    Par Djedjeridoo dans le forum Composants VCL
    Réponses: 3
    Dernier message: 16/06/2003, 22h56
  4. Dessiner un rectangle avec bords et texte ...
    Par Djedjeridoo dans le forum Composants VCL
    Réponses: 3
    Dernier message: 16/06/2003, 18h17
  5. Réponses: 9
    Dernier message: 11/03/2003, 13h22

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