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 :

Dessiner un losange


Sujet :

Algorithmes et structures de données

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 55
    Points : 32
    Points
    32
    Par défaut Dessiner un losange
    Bonjour,
    Je cherche un algo qui permet de mettre des couleurs dans une image comme cela :


    J'ai penser a un algo mais il est pas du tout optimiser donc si quelq'un en a une autre ca serait cool

    Merci d'avance

  2. #2
    Membre éprouvé
    Avatar de Celelibi
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 087
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 087
    Points : 1 122
    Points
    1 122
    Par défaut
    Bien... Ce que je peux te proposer c'est que si tu as les coordonnées du centre (x0, y0), alors tu peux calculer les nombres que t'as dans les pixel de coordonnée (x, y) par abs(x-x0) + abs(y-y0).
    Et t'as plus qu'à leur associer une couleur.


    Le seul soucis c'est que tu vas parcourir autant de pixels à colorier que de pixels à ne pas colorier.
    Donc si tu veux vraiment optimiser tu peux dessiner des losanges en partant du centre.

    Pour une distance d du centre, il est facile de calculer les coordonnées des 4 coins.
    Puis à partir de ces coordonnées il est facile de se déplacer en diagonale pour colorier les pixels.
    Les vaches ne peuvent PAS voler, quoi qu'elles aient pu vous raconter.

  3. #3
    Membre habitué Avatar de sologne
    Homme Profil pro
    Chargé de missions
    Inscrit en
    Mai 2011
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Chargé de missions
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2011
    Messages : 73
    Points : 125
    Points
    125
    Par défaut
    Bonjour,

    Voici une idée que je te propose. Pour chaque case, tu peux associer un couple de coordonnées (voir l'image en PJ).
    Du coup je traiterai le problème avec les diagonales dont les coordonnées sont facilement paramétrable. Pour celles que j'ai dessinée, la N-ième diagonales et de la forme (i, N-i) avec i variant de 0 à N, ce qui en terme d'algorithme donne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    Saisir N; // taille du losange
    Lire N;
    Pour k allant de N à 0 par pas de -1
       Pour i allant de 0 à k
            // diagonale du carré en haut à droite
            case(i,k-i) <-- k;
            case(i,k-i) <-- Couleur(k);
            // diagonale du carré en haut à gauche
              // à toi de jouer ...
            // diagonale du carré en bas à droite
              // à toi de jouer ...
            // diagonale du carré en bas à gauche
              // à toi de jouer ...
       FinPour
    FinPour
    Il te reste à modéliser les autre diagonales et à les mettre dans les boucles.

    Voila une idée possible, mais comme toujours en algo il existe plusieurs chemins.

    Bon courage
    Images attachées Images attachées  

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par YohDono Voir le message
    Bonjour,
    Je cherche un algo qui permet de mettre des couleurs dans une image comme cela :
    ..
    J'ai penser a un algo mais il est pas du tout optimiser donc si quelq'un en a une autre ca serait cool

    Merci d'avance
    Est-ce un vrai losange quelcquonque, ou comme tu le montres dans ton dessin un carré tourné (les 4 côtés égaux, ou si tu veux le méme nombre de pixels en horizontal et vertical) ?
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 55
    Points : 32
    Points
    32
    Par défaut
    Bonjour,
    Désolé d'avoir pris autant de temps pour répondre, mais j'étais un peu débordé...

    Déja je suis contant que les solutions auxquelles j'ai pensé soit proposé

    @Celelibi : C'est la solution que j'ai adopté.

    @sologne : J'ai pensé à cette solution mais j'ai l’impression quelle est coûteuse en ressource, après j'avoue que je l'ai pas testé donc je ne sais pas...

    @souviron34 : Même si ce n'est plus nécessaire, oui il s'agissait des losanges reguliers.

    Merci à tous pour voter aide

  6. #6
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 729
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 729
    Points : 15 132
    Points
    15 132
    Par défaut
    Bonjour,

    je déterre mais c'est pour la bonne cause, je propose un algo finalisé pour le langage Pascal.

    Testé sous Linux/Lazarus mais ça devrait fonctionner sous Windows/Delphi, il n'y a rien de particulier dans le code : juste que je dessine un losange de 100x100 plein de vert en haut à gauche de la fiche, et que je lui rajoute une bordure rouge pour bien voir.

    Enjoy :
    Code pascal : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    procedure TForm1.Button1Click(Sender: TObject);
    var
      h,w,centre :integer;
    begin
      centre := 100 div 2;
      with Canvas do 
      begin
        for h := 0 to centre do // hauteur
          for w := 0 to h do    // largeur 
          begin
            pixels[abs(w-centre), abs(w-h+centre)] := clGreen; // en haut à gauche
            pixels[abs(w+centre), abs(w-h+centre)] := clGreen; // en haut à droite
            pixels[abs(w-h+centre), abs(w+centre)] := clGreen; // en bas à gauche
            pixels[abs(h-w+centre), abs(w+centre)] := clGreen; // en bas à droite
          end;
        // bordure rouge
        pen.Color:=clRed;
        pen.Style:=psSolid;
        Polyline([Point(50, 0), Point(100, 50), Point(50, 100), Point(0, 50), Point(50, 0)]);
      end;
    end;


    Citation Envoyé par YohDono Voir le message
    @Celelibi : C'est la solution que j'ai adoptée.

    @sologne : J'ai pensé à cette solution mais j'ai l’impression qu'elle est coûteuse en ressource, après j'avoue que je l'ai pas testée donc je ne sais pas...
    Bah, au final on (enfin, moi ) arrive au même code.

    Merci aux contributeurs qui m'ont mis sur la piste
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

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

Discussions similaires

  1. dessiner un losange plein
    Par amateurc dans le forum Débuter
    Réponses: 17
    Dernier message: 21/02/2008, 10h12
  2. Dessiner un losange
    Par kheuzo dans le forum C
    Réponses: 4
    Dernier message: 07/10/2007, 10h53
  3. dessiner un losange en java
    Par gridsof dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 14/05/2007, 00h13
  4. graphisme ; comment dessiner un losange
    Par gridsof dans le forum Développement 2D, 3D et Jeux
    Réponses: 3
    Dernier message: 13/05/2007, 20h06
  5. dessin losange remplit dans un picture box
    Par scr dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 26/12/2005, 10h43

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