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

Flash Pascal Discussion :

Movieclip en coordonnées mathématiques [Flash Pascal]


Sujet :

Flash Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de Archimède
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2005
    Messages
    1 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 644
    Par défaut Movieclip en coordonnées mathématiques
    Je me suis essayé à un movieclip en coordonnées mathématiques...
    Pas de soucis

    ci-joint : (un debut de méthodes de dessin)

    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
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
     
    Program reelmovieclip;//movieclip en coordonnées mathématiques
     
    uses Flash8Ext,Math;
     
    {$BACKGROUND $ffffff}
     
    const 
    {$FRAME_WIDTH  1000}
    {$FRAME_HEIGHT 500}
    {$FRAME_RATE     30}
     
    frame_width=1000;
    frame_height=500;
     
     
    type
       TRpoint = external class(flash.geom.Point)
        constructor Create(x, y: double);
        property x: double;
        property y: double;
       end;
     
     TReelMovieclip=class(MovieClip)
      constructor Create(Aowner:MovieClip;ANme:string;ADepth,x1,x2,y1,y2:double;width,height:Integer);
      xmin,xmax:double;
      ymin,ymax:double;
      taillex,tailley:double;
      Gx,Gy:double;
      xo,yo:double;
      w,h:integer;
      tabmax:integer;// valeur max de l'indice de courbe
      courbe:array of TRpoint;
      function transform(x,y:double):TRPoint;
      Procedure RMoveTo(x,y:double);
      Procedure RLineTo(x,y:double);
      Procedure RLine(x1,y1,x2,y2:double);
      Procedure RPolyline;// pas de possibilité de mettre un array of TRpoint en paramètre
      Procedure OnEnterFrame;
     
      Procedure Paint;
     end;
     
     Type TTraceur=class(MovieClip)
      graph:TReelMovieclip;
      constructor create;
     end; 
     
     var  
       traceur:TTraceur;
     
     constructor TReelMovieclip.create(Aowner:MovieClip;ANme:string;ADepth,x1,x2,y1,y2:double;width,height:Integer);
     begin
      inherited Create(Aowner,'reelmovie',1);
      xmin:=x1;
      ymin:=y1;
      xmax:=x2;
      ymax:=y2;
      w:=width;
      h:=height;
      taillex:=xmax-xmin;
      tailley:=ymax-ymin;
      Gx:=w/taillex;
      Gy:=h/tailley;
      xo:=-xmin*Gx;
      yo:=ymax*Gy;
      tabmax:=200;//pour arriver au bout de la graduation 10 (de -10 à 10 =>10 pts par grad)
      _x:=0;
      _y:=0;
     
     
      paint;//Pour le dessin
     end;
     
     
    Function TReelMovieclip.transform(x,y:double):TRpoint; 
    begin
      result:=TRpoint.create(xo+x*Gx,yo-y*Gy); 
    end;
     
    Procedure TReelMovieclip.RMoveTo(x,y:double);
    begin
     moveto(xo+x*Gx,yo-y*Gy);
    end;
     
    Procedure TReelMovieclip.RLineTo(x,y:double);
    begin
     lineto(xo+x*Gx,yo-y*Gy);
    end;
     
    Procedure TReelMovieclip.RLine(x1,y1,x2,y2:double);
    begin
     RMoveto(x1,y1);
     RLineto(x2,y2);
    end;
     
    Procedure TReelMovieclip.RPolyline;
    var i:integer;
    begin
      RMoveto(courbe[0].x,courbe[0].y);
      for i:=1 to tabmax do Rlineto(courbe[i].x,courbe[i].y);
    end;
     
    Procedure TReelMovieclip.paint; //on dessine ici
    var i:integer;
    begin
     for i:=0 to tabmax do courbe[i]:=TRPoint.create(i/10-10,4*sin(2*3.14*(i/10-10)/10));  //avec coordonnées mathématiques, c'est l'intérêt
     
    //quadrillage
     lineStyle(2, $000000);
     for i:=-20 to 20 do Rline(i,ymin,i,ymax);
     for i:=-10 to 10 do Rline(xmin,i,xmax,i);
     lineStyle(1,$1BD2FF);
     for i:=-100 to 100 do Rline(xmin,i/10,xmax,i/10);
     for i:=-100 to 100 do Rline(i/10,ymin,i/10,ymax);
     //repère
     lineStyle(2, $000000);
     Rline(xmin,0,xmax,0);
     Rline(0,ymin,0,ymax);
     //courbe
     lineStyle(3, $ff0000);
     Rpolyline;
    end;
     
     
    Procedure TReelMovieclip.onEnterFrame;
    var i:integer;
    begin
     
    end;
     
     
    Constructor TTraceur.create;
    begin
     inherited create(nil,'traceur',1);
     graph:=TReelMovieclip.create(self,'reelmovie',1,-10,10,-5,5,FRAME_WIDTH,FRAME_HEIGHT); //à définir pour le repère en x de -10 à 10 et -5;5 en y
     //+dimensions du repère:  _width et _height
    end; 
     
    begin 
       Traceur:=TTraceur.Create();
    end.
    je précise que j'ai rajouté dans Flash8ext :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     TRpoint=external class(Object)
       property x:double;
       property y:double;
      end;
    ma question est que en gardant un movieclip statique, c.à.d sans faire évoluer _x,_y ou _rotation, est-t-il possible d'incrémenter dans le onframenter
    une variable, ici tabmax pour faire tracer la courrbe au fur et à mesure de Frame_rate ?

    J'ai fait un essai qui n'était pas concluant...c'est pour ça que j'ai un tableau de TRPoint....


    a+

  2. #2
    Membre Expert
    Avatar de Archimède
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2005
    Messages
    1 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 644
    Par défaut ajout de deux méthodes
    rectangle+cercle :

    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
     
    Procedure TReelMovieclip.Rrectangle(x1,y1,x2,y2:double);
    begin
     RMoveto(x1,y1);
     RLineTo(x2,y1);
     RLineto(x2,y2);
     RLineto(x1,y2);
     RLineto(x1,y1);
    end;
     
    Procedure TReelMovieclip.Rcircle(Cx,Cy,Radius:double); //si orthonormé
    var a,b,R:double;
    begin
      R:=radius*Gx;
      Cx:=xo+Cx*Gx;
      Cy:=yo-Cy*Gy;
      a:= R * 0.414213562;
      b:= R * 0.707106781;
      moveTo(Cx+R,Cy);
      curveTo(Cx+ R, Cy+-a, Cx+b,Cy -b);
      curveTo(Cx+ a,Cy-R,Cx,Cy -r);
      curveTo(Cx-a,Cy -R,Cx-b,Cy -b);
      curveTo(Cx-R, Cy-a,Cx-R,Cy);
      curveTo(Cx-R,Cy+a,Cx-b,Cy+b);
      curveTo(Cx-a,Cy +R,Cx,Cy+r);
      curveTo(Cx+a,Cy +R,Cx+b,Cy+b);
      curveTo(Cx+R,Cy+a,Cx+R,Cy);
    end;
    a+

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

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    voici ce que je te propose:
    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
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
     
    program Graph;
     
    uses
      Flash8;
     
    {$BACKGROUND $ffffff}
    {$FRAME_WIDTH  1000}
    {$FRAME_HEIGHT 500}
    {$FRAME_RATE     30}
     
    const  
      frame_width=1000;
      frame_height=500;
      xmin = -10;
      xmax = +10;
      ymin = - 5;
      ymax = + 5;     
      xsize= xmax - xmin;
      ysize= ymax - ymin;
      Gx   = frame_width / xsize;
      Gy   = frame_height/ ysize;
      xo   =-xmin * Gx;
      yo   = ymax * Gy;
     
    type
      RealMovie = class(MovieClip)
        procedure RLine(x1, y1, x2, y2: Double);
      end;
     
      TGraphe = class(RealMovie)
        Courbes: array[0..1] of RealMovie;
        Courbe : Integer;
        Temps  : Integer;
        Origine: Double;
        x1, y1 : Double;
        x2, y2 : Double;
        constructor Create;
        procedure GetPoint;
        procedure onEnterFrame;
      end;
     
    procedure RealMovie.RLine(x1, y1, x2, y2: Double);
    begin
      moveTo(xo+x1*Gx,yo-y1*Gy);
      lineTo(xo+x2*Gx,yo-y2*Gy);
    end;
     
    constructor TGraphe.Create;
    var
      i : Integer;
    begin
      inherited Create(nil, 'graphe', 0);
    //quadrillage
      lineStyle(2, $000000);
      for i := -20 to 20 do 
        Rline(i,ymin,i,ymax);
      for i := -10 to 10 do 
        Rline(xmin,i,xmax,i);
      lineStyle(1,$1BD2FF);
      for i := -100 to 100 do 
        Rline(xmin,i/10,xmax,i/10);
      for i := -100 to 100 do 
        Rline(i/10,ymin,i/10,ymax);
      //repère
      lineStyle(2, $000000);
      Rline(xmin,0,xmax,0);
      Rline(0,ymin,0,ymax);
      // les courbes
      Courbes[0] := RealMovie.Create(nil, 'courbe1', 1);
      Courbes[1] := RealMovie.Create(nil, 'courbe2', 2);
      // style de trait
      Courbes[0].lineStyle(3, $ff0000);
      // placée à droite de l'écran
      Courbes[0]._x := frame_width;
      Courbe := 0;
      Temps  := 0;
      Origine := 0;
      x2 := 0;
      y2 := 0;
      // calculer le premier point
      GetPoint;
    end;
     
    procedure TGraphe.GetPoint;
    begin
      x1 := x2;
      y1 := y2;
      x2 := Temps/10 - 10;
      y2 := 4 * sin(2 * 3.14 * (Temps/10 - 10) / 10);
    end;
     
    procedure TGraphe.onEnterFrame;
    begin  
    // point suivant
      Inc(Temps);
      GetPoint;
    // tracer sur la courbe active
      Courbes[Courbe].RLine(x1 - Origine, y1, x2 - Origine, y2);
    // faire défiler les deux courbes
      Courbes[0]._x := Courbes[0]._x - frame_width/200;
      Courbes[1]._x := Courbes[1]._x - frame_width/200;
    // si la courbe active arrive à gauche
      if (Courbes[Courbe]._x <= 0) then
      begin
      // changer de courbe active (celle-ci est pleine)
        Courbe := 1 - Courbe;
      // effacer l'ancienne qui n'est plus visible à l'écran
        Courbes[Courbe].clear;
      // redéfinir le style de trait perdu par le Clear
        Courbes[Courbe].lineStyle(3, $ff0000);
      // placer la courbe à la suite de la précédente
        Courbes[Courbe]._x := Courbes[1 - Courbe]._x + frame_width;
      // déclarer l'origine en conséquence
        Inc(Origine, 20);
      end;
    end;
     
    begin
      TGraphe.Create;
    end.
    explications:

    TGraphe dessine une bonne fois pour toute la grille qui ne bouge plus (enfin je crois)

    ensuite j'ai deux TCourbe qui servent de panneau défilant, au départ on dessine sur Courbes[0] qui commence à droite de l'écran et défile vers la gauche au fur et à mesure du tracé.
    Quand ce graphe arrive sur le bord gauche, on vient placer Courbes[1] à sa suite pour poursuivre le dessin.
    Courbes[0] continue à sortir de l'écran vers la gauche en étant remplacé au fur et à mesure par Courbes[1]
    Quand Courbes[1] arrive sur le bord gauche, on reprend sur Courbe[0] suivant le même principe.

    EDIT: pour que le quadrillage suive il suffit de le dessiner après le "Clear" sur la Courbe
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  4. #4
    Membre Expert
    Avatar de Archimède
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2005
    Messages
    1 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 644
    Par défaut
    Déjà, je te remercie de te casser la tête avec ça .....
    T'es pas obligé...

    Ta solution en gros est de tracer la courbe et de la déplacer avec _x...
    Mon but étant de la faire tracer points par points au fur et à mesure du frame_
    rate.

    C'est pour ça que j'avais besoin d'un tableau de points avec un polyline qui évoluerait en taille d'un point à chaque passage dans le onenterframe...
    Avec polyline, la courbe s'enrichirait d'un point à chaque fois.

    le problème, c'est qu'on dessine dans un movieclip à la création une fois pour toute et on déplace celui-ci en _x, _y ,_rotation...
    l'animation consiste en un déplacement de movieclips.

    j'ai essayé dans le onenterframe d'augmenter d'un point courbe à chaque fois et de la faire tracer avec paint (RPolyline) ça ne marche pas.

    Il serait nécessaire de recréer le movieclip à chaque entrée dans onenterframe...(ce qui est impossible)

    merci encore de ton aide.


    ps: mon but étant le tracé de la cycloïde avec la roue pour un tracé qui se ferait au fur et à mesure.

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

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    Citation Envoyé par Archimède Voir le message
    Déjà, je te remercie de te casser la tête avec ça .....
    T'es pas obligé...
    je sais bien, mais j'ai un utilisateur actif sous la main et ça fait plaisir

    Citation Envoyé par Archimède Voir le message
    Ta solution en gros est de tracer la courbe et de la déplacer avec _x...
    Mon but étant de la faire tracer points par points au fur et à mesure du frame_
    rate.

    C'est pour ça que j'avais besoin d'un tableau de points avec un polyline qui évoluerait en taille d'un point à chaque passage dans le onenterframe...
    Avec polyline, la courbe s'enrichirait d'un point à chaque fois.

    le problème, c'est qu'on dessine dans un movieclip à la création une fois pour toute et on déplace celui-ci en _x, _y ,_rotation...
    l'animation consiste en un déplacement de movieclips.

    j'ai essayé dans le onenterframe d'augmenter d'un point courbe à chaque fois et de la faire tracer avec paint (RPolyline) ça ne marche pas.

    Il serait nécessaire de recréer le movieclip à chaque entrée dans onenterframe...(ce qui est impossible)

    merci encore de ton aide.


    ps: mon but étant le tracé de la cycloïde avec la roue pour un tracé qui se ferait au fur et à mesure.
    je ne comprend pas bien ce que tu veux faire...mais tout est possible, je n'ai pas réellement testé les performances des différentes approches

    1) déplacer le movieclip en ajoutant les points supplémentaires

    2) clear() du movieclip et tout redessiner

    3) détruire le movieclip et en recréer un

    par contre la première approche me semble la plus indiquée pour un traitement en temps réel puisqu'on limite le code exécuté à chaque frame.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  6. #6
    Membre Expert
    Avatar de Archimède
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2005
    Messages
    1 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 644
    Par défaut
    Merci..d'ailleurs, je ne comprends pas qu'il n'y ait pas plus de personnes intéressées par ton bébé...
    Moi, je trouve ça génial...ça donne un nouvel élan au codage en pascal en touchant le développement web.

    Ce que je veux... tu en as un exemple en pièce jointe que j'ai fait en delphi. clique sur trajectoire...

    avec clear..., il y a sans doute moyen...je vais faire de nouveaux essais.

    a+
    Fichiers attachés Fichiers attachés

  7. #7
    Rédacteur/Modérateur

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

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 174
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par Paul TOTH Voir le message
    voici ce que je te propose:
    Très joli exemple ! Je l'ajoute à ma collection.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 31
    Dernier message: 29/11/2008, 15h03
  2. Récuperer les coordonnées d'un vecteur
    Par kerzut dans le forum OpenGL
    Réponses: 5
    Dernier message: 15/04/2003, 12h51
  3. évaluateur de formule mathématique
    Par lyrau dans le forum Générateurs de compilateur
    Réponses: 5
    Dernier message: 28/03/2003, 23h50
  4. Coordonnées du curseur ???
    Par LE CHAKAL dans le forum Composants VCL
    Réponses: 3
    Dernier message: 27/08/2002, 18h28
  5. Implémentation des fonctions mathématiques
    Par mat.M dans le forum Mathématiques
    Réponses: 9
    Dernier message: 17/06/2002, 17h19

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