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

Mathématiques Discussion :

Dessiner un labyrinthe


Sujet :

Mathématiques

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    915
    Détails du profil
    Informations personnelles :
    Localisation : France, Vienne (Poitou Charente)

    Informations forums :
    Inscription : Mai 2011
    Messages : 915
    Points : 85
    Points
    85
    Par défaut Dessiner un labyrinthe
    Bonjour,

    Je pense que vous n'allez pas me comprendre.

    Depuis hier , J'ai developpé en C une librairie qui à pour fonction de générer un labyrinthe à 45° , avec possibilité de fixation de son echelle.

    En delphi , je dessine le labyrinthe généré expérimentalement par ma librairie.

    J'ai joint une image d'un labyrinthe en test expérimental, les lignes bleus sont des chemins et non des murs.

    Je souhaiterai le dessiner avec l'épaisseur des chemins paramétrable (voir exemple.jpg), et je ne sais pas faire.

    Sachant que le générateur m'envoie une liste de points décrivant le chemins

    Code delphi : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    type tvecteur=record
         x,y : word;
    end;

    La fonction putp appelée par ma librairie, à chaque fois qu'un chemin est dessiné, elle envoie donc les coordonnée x y de point du chemin.

    La fonction putp appelée selon le nombre de chemins qu'il y a.

    Après je les relie, en reliant chaque point.

    Code delphi : 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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    procedure putp( nombre : word;_pv : pvecteur); stdcall;
     
    type tatv=array[0..0] of tvecteur;
         patv=^tatv;
     
    var  p : ptl;
     
         d : byte;
         n,xde,yde,xa,ya : word;
         pv : patv;
     
    begin
         pv := ptr(longword(_pv));
     
         xde := pv[0].x;
         yde := pv[0].y;
         for n := 1 to nombre-1 do begin
           p := nil;
           reallocmem(p,sizeof(ttl));
     
           p^.xde := xde*fscale;
           p^.yde := yde*fscale;
     
     
     
     
     
     
         p^.central := true; //vecteur décrivant le chemin 
     
         xde := pv[n].x;
         yde := pv[n].y;
     
     
         p^.xa := xde*fscale;
         p^.ya := yde*fscale;
     
     
     
         objtl.Add(tobject(p));
        end;
     
     
     
    end;
     
    procedure tform1.rafraichirlab;
    var xf,yf : integer;
        n,rx,ry : integer;
        d : byte;
        p : ptl;
    begin
         for n := 0 to objtl.count-1 do begin
             p := ptl(objtl.items[n]);
             if (p^.central) then //le chemin
                image1.canvas.pen.color := clblue
             else
                image1.canvas.Pen.color := clblack; //son epaisseur
             image1.canvas.MoveTo(p^.xde*8,p^.yde*8);
             image1.canvas.LineTo(p^.xa*8,p^.ya*8);
         end;
    end;

    Dans l'image exemple.jpg la fonction putp serait appelée que 2 fois.

    Ca marche , le labyrinthe s'affiche ; mais je souhaiterai faire une fonction pour dessiner l'épaisseur (p^.central=false).

    Merci ;
    Images attachées Images attachées   

  2. #2
    Expert éminent

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 816
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fabricant et casseur d'avions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 816
    Points : 7 648
    Points
    7 648
    Par défaut
    Salut

    Citation Envoyé par yann458 Voir le message
    Je pense que vous n'allez pas me comprendre
    De suite... on n'est pas plus cons que les autres tu sais...

    Citation Envoyé par yann458 Voir le message
    Ca marche , le labyrinthe s'affiche ; mais je souhaiterai faire une fonction . pour dessiner l'épaisseur (p^.central=false).
    Oui... et où est le problème?
    Parce que là comme ça, et sans avoir épluché ta tartine de code (à mettre entre les balises qui vont bien la prochaine fois histoire que ce soit plus lisible...), je te dirai de faire pareil, mais en dessinant des rectangles au lieu de dessiner des traits... ou de dessiner deux traits parallèles à celui que tu traces actuellement (avec en option un petit traitement à chaque intersection pour gérer plus finement les coins de mus)... bref je ne vois pas où tu bloques.

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Italie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 271
    Points : 491
    Points
    491
    Par défaut
    ou plus simple, dessine une ligne plus epaisse, en travaillant sur Pen :

    ou bien


  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    915
    Détails du profil
    Informations personnelles :
    Localisation : France, Vienne (Poitou Charente)

    Informations forums :
    Inscription : Mai 2011
    Messages : 915
    Points : 85
    Points
    85
    Par défaut
    Citation Envoyé par fab256 Voir le message
    ou plus simple, dessine une ligne plus epaisse, en travaillant sur Pen :

    ou bien

    Désolé mais je travaille en vectoriel , pour employer mon labyrinthe dans mon jeux opengl

    J'ai rechercher toute cet aprés-midi ,

    il fallait employer la technologie d'intersection.

    Reste plus qu'a gérer les carrefours , je ne sais pas si.......

    voir image jointe (ligne rouge signifie début du chemin)
    Images attachées Images attachées  

  5. #5
    Expert éminent

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 816
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fabricant et casseur d'avions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 816
    Points : 7 648
    Points
    7 648
    Par défaut
    Citation Envoyé par yann458 Voir le message
    Reste plus qu'a gérer les carrefours , je ne sais pas si.......
    Si...???

    Tu prends chaque point représentant une intersection, à chaque point tu sais combien de chemin arrivent, et d'où ils arrivent.
    Tu précalcules les positions des extrémités de murs pour toutes les configurations (intersection, pas intersection...).
    Pour chaque mur arrivant à l'intersection, tu regardes quels sont ses voisins, et tu places l'extrémité du mur en conséquence.

    Exemple, à ton intersection, tu as 3 chemins qui arrivent: un au nord, un à l'ouest, un au sud-est. Tu commences par le chemin nord, tu regardes si celui du nord-ouest arrive: non. Celui de l'ouest: oui. Ca veut dire que le mur s'arrête à telle position. Tu regardes de l'autre côté. Nord-est: non. Est: non. Sud-est: oui, intersection à telle position. Tu passes au chemin arrivant suivant, celui de l'ouest par exemple, et tu recommences.

    Sinon, autre solution, plus graphique, maintenant que tu as tracé toutes les bordures, tu traces tous les intérieurs en blanc avec un pixel de moins en largeur!

Discussions similaires

  1. [Débutant] Dessiner un labyrinthe
    Par yacine19dz dans le forum MATLAB
    Réponses: 1
    Dernier message: 17/05/2011, 17h56
  2. Comment dessiner un labyrinthe?
    Par chiennoir dans le forum C++Builder
    Réponses: 2
    Dernier message: 07/10/2006, 19h37
  3. [Graphic] Dessiner des hachures
    Par sylverspoon dans le forum 2D
    Réponses: 7
    Dernier message: 22/03/2006, 22h46
  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: 3
    Dernier message: 12/06/2002, 20h03

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