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

Contribuez Pascal Discussion :

Flocon de neige


Sujet :

Contribuez Pascal

  1. #1
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 062
    Points : 15 353
    Points
    15 353
    Billets dans le blog
    9
    Par défaut Flocon de neige
    Bonjour !

    Je vous propose un programme dessinant un flocon de neige à cinq branches. Le programme est une application console utilisant la bibliothèque Cairo. Le résultat du programme est une image de type PNG.

    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
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    program Snowflake;
     
    { http://www.informatik.uni-kiel.de/~sb/WissRech/cairo3_recursion.c }
     
    uses
      cairo;
     
    procedure snowflake_arm(cr: pcairo_t; l: integer);
    begin
      cairo_move_to(cr, 0.0, 0.0);
      cairo_line_to(cr, 0.0, 0.5);
      cairo_stroke(cr);
     
      if l > 0 then
      begin
        cairo_save(cr);
     
        cairo_translate(cr, 0.0, 0.5);
        cairo_scale(cr, 0.45, 0.45);
     
        snowflake_arm(cr, l - 1);
     
        cairo_rotate(cr, 1.2);
        snowflake_arm(cr, l - 1);
     
        cairo_rotate(cr, -2.4);
        snowflake_arm(cr, l - 1);
     
        cairo_restore(cr);
      end;
    end;
     
    const
      ZOOM = 3;
     
    var 
      cr: pcairo_t;
      surface: pcairo_surface_t;
      i, l: integer;
     
    begin
      surface := cairo_image_surface_create(CAIRO_FORMAT_ARGB32, ZOOM * 400, ZOOM * 80);
      cr := cairo_create(surface);
     
      cairo_set_source_rgba(cr, 1, 1, 1, 1);
      cairo_paint(cr);
     
      cairo_set_source_rgba(cr, 0, 0, 0, 1);
     
      for l := 0 to 4 do
      begin
        cairo_save(cr);
        cairo_translate(cr, ZOOM * 40.0 + l * ZOOM * 80.0, ZOOM * 40.0);
        cairo_scale(cr, ZOOM * 40.0, ZOOM * 40.0);
        cairo_set_line_width(cr, 0.01);
     
        for i := 0 to 4 do
        begin
          cairo_save(cr);
          cairo_rotate(cr, 2.0 * PI * i / 5);
          snowflake_arm(cr, l);
          cairo_restore(cr);
        end;
     
        cairo_restore(cr);
      end;
     
      cairo_surface_write_to_png(surface, 'snowflake.png');
      cairo_destroy(cr);
      cairo_surface_destroy(surface);
    end.
    Nom : snowflake.png
Affichages : 555
Taille : 22,5 Ko
    Fichiers attachés Fichiers attachés
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  2. #2
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 430
    Points
    28 430
    Par défaut
    une petite version FlashPascal vite fait

    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
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
     
    program Snowflake;
     
    {
     
    http://www.informatik.uni-kiel.de/~sb/WissRech/cairo3_recursion.c
     
    http://www.developpez.net/forums/d1559438/autres-langages/pascal/contribuez/flocon-neige/#post8477803
    }
     
    {$FRAME_WIDTH 400}
    {$FRAME_HEIGHT 400}
    {$FRAME_RATE 1}
    {$BACKGROUND $FFFFFF}
     
    uses
      Flash8;
     
    type
      TSnowFlake = class(MovieClip)
        FLen   : Integer;
        FChilds: Integer;
        constructor Create(parent: MovieClip; x, y, len, Depth, Childs: Integer);
        procedure onEnterFrame; override;
      end;
     
    constructor TSnowFlake.Create(parent: MovieClip; x, y, len, Depth, Childs: Integer);
    begin
      inherited Create(parent, IntToStr(Depth), Depth);
      _x := x;
      _y := y;
      _rotation := 360 * Depth / 5;
      LineStyle(0, clBlue);
      MoveTo(0, 0);
      LineTo(0, len);
      FLen := len;
      FChilds := Childs;
    end;
     
    procedure TSnowFlake.onEnterFrame;
    var
      i: Integer;
      f: TSnowFlake;
    begin
      if FChilds > 0 then
      begin
        for i := -1 to +1 do
        begin
          f := TSnowFlake.Create(Self, 0, Flen, (FLen * 2) div 5, i, FChilds - 1);
        end;
        FChilds := 0;
      end;
    end;
     
     
    var
      i, l: integer;
      f: TSnowFlake;
     
    begin
      for l := 0 to 4 do
      begin
     
        f := TSnowFlake.Create(_root, 200, 200, 100, l, 10);
     
      end;
     
    end.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  3. #3
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 062
    Points : 15 353
    Points
    15 353
    Billets dans le blog
    9
    Par défaut
    Merci et bravo, Paul. Ta version est d'une concision étonnante.
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

Discussions similaires

  1. [Lazarus] Flocons de neige
    Par Roland Chastain dans le forum Lazarus
    Réponses: 4
    Dernier message: 24/12/2013, 15h54
  2. Réponses: 0
    Dernier message: 05/10/2012, 13h47
  3. Flocon de neige
    Par momad321 dans le forum Alimentation
    Réponses: 3
    Dernier message: 05/05/2011, 00h09
  4. l'avantage du modèle flocon de neige
    Par ddane22 dans le forum Conception/Modélisation
    Réponses: 1
    Dernier message: 21/02/2010, 20h40
  5. Comment coder un effet de neige ?
    Par the_magik_mushroom dans le forum Langage
    Réponses: 11
    Dernier message: 18/12/2004, 00h29

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