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.
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.
Il te reste à modéliser les autre diagonales et à les mettre dans les boucles.
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
Voila une idée possible, mais comme toujours en algo il existe plusieurs chemins.
Bon courage
"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
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
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;
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
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager