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

Langage Delphi Discussion :

Code "intelligent" de traçage d'un cercle sur un DrawGrid


Sujet :

Langage Delphi

Mode arborescent

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mai 2007
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 20
    Par défaut Code "intelligent" de traçage d'un cercle sur un DrawGrid
    Bonjour,

    J'essaye de "dessiner" un cercle sur un DrawGrid comme présenté sur la figure dessous. Ceci doit étre réaliser avec un code en Delphi bien évidemment et non par la souris par exemple. Dans l'image en PJ j'ai fait un "zoom in" pour que vous poussiez analyser la situation. Chaque cellule (en rouge) ne doit avoir que 2 cellules voisines de 8 cellues autour d'elle. Dans le cas réel, ce DrawGrid aura comme largeur de cellule 1mm, donc je ne cherche pas vraiment un cercle "parfait" (comme le cercle en bleu) mais une bonne approximation de façon après faire un "zoom out" je vois presque un cercle parfait.

    Alors, j'ai codé ça :
    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
    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
    procedure TForm10.okClick(Sender: TObject);
    var
    x,y,r,i,k1,k2:integer;
    begin
    x:=strtoint(edit1.Text);
    y:=strtoint(edit1.Text);
    r:=strtoint(edit3.Text);
    if (r<0) then
    MessageBox(0,'Erreur : Rayon négatif !','Attention !',MB_OK)
    else
    begin
    k1:=x;
    k2:=y+r;
    for i:=0 to r do
      begin
      form7.dg.canvas.brush.color := clyellow;
      rect := form7.dg.CellRect(k1,k2);
      form7.dg.Canvas.FillRect(rect);
      k1:=k1+1;
      k2:=k2-1;
      end;
     
    for i:=0 to r do
      begin
      form7.dg.canvas.brush.color := clyellow;
      rect := form7.dg.CellRect(k1,k2);
      form7.dg.Canvas.FillRect(rect);
      k1:=k1-1;
      k2:=k2-1;
      end;
    for i:=0 to r do
      begin
      form7.dg.canvas.brush.color := clyellow;
      rect := form7.dg.CellRect(k1,k2);
      form7.dg.Canvas.FillRect(rect);
      k1:=k1-1;
      k2:=k2+1;
      end;
    for i:=0 to r do
      begin
      form7.dg.canvas.brush.color := clyellow;
      rect := form7.dg.CellRect(k1,k2);
      form7.dg.Canvas.FillRect(rect);
      k1:=k1+1;
      k2:=k2+1;
      end;
    end;
     
    end;
    Mais ce code trace un losange

    Les données à fournir par l'utilisateur pour tracer le cercle sont X et Y coordonnées du centre du cercle et R le rayon.

    J'ai essayé d'utilse une équation paramétrique d'un cercle mais toujours bloqué.

    Avez-vous une proposition (ou un code pourquoi pas ^^) pour améliorer le code au-dessus ou pour recommencer dès le début SVP ?

    Merci d'avance.
    Images attachées Images attachées  

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