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 :
Mais ce code trace un losange
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;![]()
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.
Partager