Vote des utilisateurs
2
0
Détails
Licence : Non renseignée
Mise en ligne le 11 septembre 2016
Langue : Français
Référencé dans
Navigation
Arbre de Pythagore
Arbre de Pythagore
Dessin d'un arbre de Pythagore dans une image PNG, au moyen de la bibliothèque Cairo.
C'est jolie et plutôt bien fait! ;-)
Que c'est vraiment dommage que je n'arrive pas à faire afficher quelque chose avec Cairo sous Linux : ton programme fonctionne et me génère bien un fichier, moi ce que je voudrais ça serait voir la même image dans un TImage ou TPaintbox ou simplement sur le canvas de TForm1, mais bon, voir quelque chose et j'ai encore passé un temps dément sans rien trouver.
À croire que personne n'a jamais fait tourner Cairo sous Linux avec Pascal
Maintenant, je me demande si ça vaut le coup de se décarcasser avec cette librairie : lors de mes essais, j'ai trouvé une instruction qui devrait permettre (on dirait, tout au moins, vu le nom : surface := cairo_image_surface_create_from_png (PChar(ExtractFilePath(Application.ExeName) + 'bidon.png'));) de lire un fichier.
Ne voyant toujours rien s'afficher, j'ai utilisé la méthode bourrin : changement du nom du fichier, et relance. Je m'attendais à un message d'erreur, et non, rien de chez rien...
Ça n'inspire pas confiance...
À croire que personne n'a jamais fait tourner Cairo sous Linux avec Pascal
Maintenant, je me demande si ça vaut le coup de se décarcasser avec cette librairie : lors de mes essais, j'ai trouvé une instruction qui devrait permettre (on dirait, tout au moins, vu le nom : surface := cairo_image_surface_create_from_png (PChar(ExtractFilePath(Application.ExeName) + 'bidon.png'));) de lire un fichier.
Ne voyant toujours rien s'afficher, j'ai utilisé la méthode bourrin : changement du nom du fichier, et relance. Je m'attendais à un message d'erreur, et non, rien de chez rien...
Ça n'inspire pas confiance...
En y pensant, je me souviens avoir lu que le composant TCairoPaintBox est utilisable sous Linux. Donc la solution existe.
Il faudrait regarder dans le code du composant ou même interroger directement l'auteur. Personnellement, n'étant pas utilisateur de Linux, je ne suis pas bien placé pour le faire.
Il faudrait regarder dans le code du composant ou même interroger directement l'auteur. Personnellement, n'étant pas utilisateur de Linux, je ne suis pas bien placé pour le faire.
Bonsoir, Roland,
et merci de ce retour.
Je t'avoue franchement qu'avec toutes les misères que me fait un simple TImage, il y a des fois où je suis vraiment découragé par tout ça... Alors, s'il faut encore aller farfouiller dans du code pour un résultat plus qu'incertain (si encore l'auteur avait précisé la compatibilité de ses composants mais non, il n'y a rien sur la page à ce propos...), je me demande si le jeu en vaut la chandelle.
En tout cas, pas en ce moment, où j'ai d'autres chats à fouetter (les pauvres bêtes )
Mais merci d'y avoir pensé.
et merci de ce retour.
Je t'avoue franchement qu'avec toutes les misères que me fait un simple TImage, il y a des fois où je suis vraiment découragé par tout ça... Alors, s'il faut encore aller farfouiller dans du code pour un résultat plus qu'incertain (si encore l'auteur avait précisé la compatibilité de ses composants mais non, il n'y a rien sur la page à ce propos...), je me demande si le jeu en vaut la chandelle.
En tout cas, pas en ce moment, où j'ai d'autres chats à fouetter (les pauvres bêtes )
Mais merci d'y avoir pensé.
Voici une variation de l'arbre de Pythagore : la taille de l'un des carrés est choisie au hasard (mais toujours inférieure à celle de l'autre carré).
Code : | Sélectionner tout |
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 63 64 65 66 67 | uses Cairo, Math; function RandomRange(const first, last: double): double; begin result := (Random(1000) / 1000) * (last - first) + first end; var context: pcairo_t; surface: pcairo_surface_t; procedure draw_branches(const x1, y1, s1: double; const n: integer); procedure draw_branch(const x2, y2, a, x3, y3, s2: double); begin cairo_save(context); cairo_translate(context, x2, y2); cairo_rotate(context, a); cairo_rectangle(context, x3, y3, s2, s2); cairo_fill(context); draw_branches(x3, y3, s2, n - 1); cairo_restore(context); end; var s2, s3, a1, a2: double; begin if n > 0 then begin s2 := s1 / Sqrt(2); s3 := s1 / RandomRange(Sqrt(2), 2); a1 := ArcCos((s2 * s2 + s1 * s1 - s3 * s3) / (2 * s2 * s1)); a2 := ArcCos((s3 * s3 + s1 * s1 - s2 * s2) / (2 * s3 * s1)); draw_branch(x1, y1, -a1, 0, -s2, s2); draw_branch(x1 + s1, y1, a2, -s3, -s3, s3); end; end; const SURFACE_WIDTH = 600; SURFACE_HEIGHT = 2 * SURFACE_WIDTH div 3; SQUARE_SIZE = SURFACE_HEIGHT / 4; X = (SURFACE_WIDTH - SQUARE_SIZE) / 2; Y = SURFACE_HEIGHT - SQUARE_SIZE; begin surface := cairo_image_surface_create(CAIRO_FORMAT_ARGB32, SURFACE_WIDTH, SURFACE_HEIGHT); context := cairo_create(surface); cairo_set_line_width(context, 2); cairo_rectangle(context, X, Y, SQUARE_SIZE, SQUARE_SIZE); cairo_set_source_rgba(context, 0, 0, 1, 0.8); cairo_fill(context); draw_branches(X, Y, SQUARE_SIZE, 8); cairo_surface_write_to_png(surface, 'image.png'); cairo_destroy(context); cairo_surface_destroy(surface); end. |
Developpez.com décline toute responsabilité quant à l'utilisation des différents éléments téléchargés.