FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  FAQFAQ  RechercherRechercher  S'enregistrerS'enregistrer  MembresMembres  GroupesGroupes  Connexion  
Derniers sujets
» un nouveau editeur panobasic
par Jean Claude Aujourd'hui à 10:18

» Compilateur FBPano
par jean_debord Aujourd'hui à 10:07

» Le compilateur.
par Pedro Alvarez Aujourd'hui à 8:36

» COMPILATEUR V 0.9 beta 7 du 10 aout 2017
par Jack Hier à 20:23

» Pb 16 (en analyse): ON_CLOSE plante à l'exécution
par Jack Hier à 20:00

» Pb 15 (en analyse): TIMER_ON plante à l'exécution
par Jack Hier à 19:58

» KGF_dll - nouvelles versions
par Yannick Dim 13 Aoû 2017 - 17:35

» probleme d'outil
par Yannick Dim 13 Aoû 2017 - 17:32

» Carte de France des régions
par Yannick Sam 12 Aoû 2017 - 21:33

» Pb 14 (en analyse): PRINT_LOCATE plante à l'exécution
par Jack Ven 11 Aoû 2017 - 22:37

» Petit avertissement [Mots réservés]
par papydall Ven 11 Aoû 2017 - 13:45

» Distances sur plan
par JL35 Jeu 10 Aoû 2017 - 21:29

» Tracé : Triangle, Carrée, Dents de scie, Sinusoïde redressée
par papydall Jeu 10 Aoû 2017 - 14:52

» Troncature dans une image
par JL35 Mer 9 Aoû 2017 - 13:45

» A chacun son point de vue
par papydall Mar 8 Aoû 2017 - 17:20

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Août 2017
LunMarMerJeuVenSamDim
 123456
78910111213
14151617181920
21222324252627
28293031   
CalendrierCalendrier

Partagez | 
 

 Animation de courbe de Bézier cubique

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
papydall

avatar

Nombre de messages : 5501
Age : 67
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

MessageSujet: Animation de courbe de Bézier cubique   Mar 25 Aoû 2015 - 2:47

 

Encore une animation.
Essayez avec ou sans la ligne 63
Code:

cls : ' Mettre le CLS en REM pour voir des belles images!


Voici le
Code:

rem ============================================================================
rem         Animation de courbe de Bézier cubique
rem                Par Papydall
rem ============================================================================

Init()
CreateInitpoint()
Anim()

end
rem ============================================================================
SUB Init()
    dim row(4,2), bezier(101,2)
    dim p1,p2,p3,jp1,jp2,jp3,incp1,incp2,incp3,q1,q2,q3,jq1,jq2,jq3,incq1,incq2,incq3
    p1 = 4 : p2 = 6 : p3 = 5  : jp1 = 0 : jp2 = 0 : jp3 = 0
    incp1 = 0.3 : incp2 = 0.3 : incp3 = 0.3
    q1 = 3 : q2 = 7 : q3 = 4  : jq1 = 0 : jq2 = 0 : jq3 = 0
    incq1 = 0.3 : incq2 = 0.3 : incq3 = 0.3
    width 0,800 : height 0,800: top 0,(screen_y - width(0))/2 : left 0,(screen_x -height(0))/2
    picture 10  : full_space 10 : 2d_target_is 10 : hide 10
    image 20
    caption 0,"<CLICK> pour arrêter ........"
END_SUB
rem ============================================================================
' D'abord nous créons 4 points de contrôle espacés également.
' Nous essayons de les mettre plus ou moins dans le même plan horizontal avec
' une compensation aléatoire du point initial.
rem ============================================================================
SUB CreateInitpoint()
    row(0,0) = 300                 : row(0,1) = 300
    row(1,0) = 300 + (rnd(060)-30) : row(1,1) = 270 + (rnd(060)-30)
    row(2,0) = 300 + (rnd(100)-50) : row(2,1) = 110 + (rnd(100)-50)
    row(3,0) = 300 - (rnd(150)-75) : row(3,1) = 200 + (rnd(150)-75)
END_SUB
rem ============================================================================
SUB Anim()
    repeat
         CreateInterpolated() : ' Interpoler la courbe de Bézier
         DrawCircleOnPath()   : ' Placer des cercles sur la courbe de Bézier
         JigglePoints()       : ' Changer légèrement les 4 points initiaux
         image_recopy()       : ' Pour un affichage sans clignotement
    until scancode <> 0
END_SUB
rem ============================================================================
' Interpoler la courbe
' Ici nous créons un ensemble à 100 éléments de points interpolés.
' Ceux-ci sont sur la courbe (spline) de Bézier
SUB CreateInterpolated()
    dim_local i,ix,x1,x2,x3,x4,y1,y2,y3,y4
    for i = 0 to 100
        ix = i/100
        x1 = (1-ix)*(1-ix)*(1-ix)*row(0,0) : y1 = (1-ix)*(1-ix)*(1-ix)*row(0,1)
        x2 = 3*(1-ix)*(1-ix)*ix*row(1,0)   : y2 = 3*(1-ix)*(1-ix)*ix*row(1,1)
        x3 = 3*(1-ix)*ix*ix*row(2,0)       : y3 = 3*(1-ix)*ix*ix*row(2,1)
        x4 = ix*ix*ix*row(3,0) : y4 = ix*ix*ix*row(3,1)
        bezier(i,0) = x1+x2+x3+x4 : bezier(i,1) = y1+y2+y3+y4
    next i
END_SUB
rem ============================================================================
' Créez les cercles de taille diminuante et le miroir
' Pour tous les points sur la courbe de Bézier définie par bezier(),
SUB DrawCircleonPath()
    dim_local i, outer,inner,surf,surf2
    cls : ' Mettre le CLS en REM pour voir des belles images!
    outer = 38
    for i = 0 to 100
        2d_fill_color 255,0,0 : 2d_pen_color 255,0,0
        outer = outer - 0.34 : surf  = 420 + (260-bezier(i,1))
        if surf > 350
           2d_circle bezier(i,0),420+(260-bezier(i,1)),outer
           2d_circle 420+(260-bezier(i,0)),420+(260-bezier(i,1)),outer
        end_if
        if outer < 2
            2d_fill_color 255,0,0 : 2d_pen_color 255,0,0 : inner = 1
        else
            2d_fill_color 164,164,164
            2d_pen_color 164,164,164 : inner = outer -1
        end_if
        if surf > 350
           2d_circle bezier(i,0),420+(260-bezier(i,1)),outer
           2d_circle 420+(260-bezier(i,0)),420+(260-bezier(i,1)),outer
        end_if
    next i
    outer = 38
    for i = 0 to 100
        2d_fill_color 255,0,0 : 2d_pen_color 255,0,0
        outer = outer - 0.34 : surf2 = bezier(i,1)
        if surf2 < 350
           2d_circle bezier(i,0),bezier(i,1),outer
           2d_circle 420+(260-bezier(i,0)),bezier(i,1),outer
        end_if
        if outer < 2
           2d_fill_color 255,0,0 : 2d_pen_color 255,0,0 : inner = 1
        else
           2d_fill_color 255,255,255 : 2d_pen_color 255,255,255 : inner = outer -1
        end_if
        if surf2 < 350
           2d_circle bezier(i,0),bezier(i,1),inner
           2d_circle 420+(260-bezier(i,0)),bezier(i,1),inner
        end_if
    next i
END_SUB
rem ============================================================================
' Compenser les points de contrôle pour donner une impression de mouvement
SUB JigglePoints()
    row(0,0) = 300 : row(0,1) = 300
    if jp1 > p1   then incp1 = -0.2
    if jp1 < 0-p1 then incp1 =  0.2
    if jp2 > p2   then incp2 = -0.2
    if jp2 < 0-p2 then incp2 =  0.2
    if jp3 > p3   then incp3 = -0.2
    if jp3 < 0-p3 then incp3 =  0.2

    jp1 = jp1 + incp1 : jp2  = jp2 + incp2 : jp3 = jp3 + incp3 / 2
    if jq1 > q1   then incq1 = -0.2
    if jq1 < 0-q1 then incq1 =  0.2
    if jq2 > q2   then incq2 = -0.2
    if jq2 < 0-q2 then incq2 =  0.2
    if jq3 > q3   then incq3 = -0.2
    if jq3 < 0-q3 then incq3 =  0.2

    jq1 = jq1 + incq1 : jq2 = jq2 + incq2 : jq3 = jq3 + incq3 / 2
    row(0,0) = row(0,0) - jp3 : row(0,1) = row(0,1) - jq3
    row(1,0) = row(1,0) - jp1 : row(1,1) = row(1,1) - jq1
    row(2,0) = row(2,0) - jp2 : row(2,1) = row(2,1) - jq2
    row(3,0) = row(3,0) - jp3 : row(3,1) = row(3,1) - jq3
END_SUB
rem ============================================================================
' Merci à Silverman et Cosmos70 pour cette astuce
SUB image_recopy()
   2d_target_is 10 : 2d_image_copy 20,0,0,width(10),height(10)
   2d_target_is 0  : 2d_image_paste 20,left(10),top(10)
   2d_target_is 10
END_SUB
rem ============================================================================
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
Jicehel

avatar

Nombre de messages : 5849
Age : 45
Localisation : 77500
Date d'inscription : 19/04/2011

MessageSujet: Re: Animation de courbe de Bézier cubique   Mar 25 Aoû 2015 - 8:44

Jolie animation - je n'ai pas essayé en compilé mais ça doit être encore plus joli et fluide
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jean Claude

avatar

Nombre de messages : 4989
Age : 63
Localisation : 83 Var
Date d'inscription : 07/05/2009

MessageSujet: Re: Animation de courbe de Bézier cubique   Mar 25 Aoû 2015 - 15:02

Merci Papydall, je me suis bien amusé.

Voila une version colorée de mon cru que j'appellerais "tête de chat" .
Code:
rem ============================================================================
rem         Animation de courbe de Bézier cubique
rem                Par Papydall
rem ============================================================================

Init()
CreateInitpoint()
Anim()

end
rem ============================================================================
SUB Init()
    dim row(4,2), bezier(101,2)
    dim p1,p2,p3,jp1,jp2,jp3,incp1,incp2,incp3,q1,q2,q3,jq1,jq2,jq3,incq1,incq2,incq3
    p1 = 0 : p2 = 10 : p3 = 5
    jp1 = 1 : jp2 = 2 : jp3 = 5
    incp1 = 0.9 : incp2 = 0.6 : incp3 = 0.1
    q1 = 2 : q2 = 7 : q3 = 4  : jq1 = 0 : jq2 = 9 : jq3 = 6
    incq1 = 0.3 : incq2 = 0.3 : incq3 = 0.3
    width 0,700 : height 0,800: top 0,(screen_y - width(0))/2
'    full_space 0
    left 0,(screen_x -height(0))/2
    color 0,0,0,0
    picture 10  : full_space 10 :color 10,0,0,0: 2d_target_is 10 : hide 10
    image 20
    caption 0,"<CLICK> pour arrêter ........"
END_SUB
rem ============================================================================
' D'abord nous créons 4 points de contrôle espacés également.
' Nous essayons de les mettre plus ou moins dans le même plan horizontal avec
' une compensation aléatoire du point initial.
rem ============================================================================
SUB CreateInitpoint()
    row(0,0) = 300                         : row(0,1) = 300
    row(1,0) = 300 + (rnd(060)-30) : row(1,1) = 270 + (rnd(060)-30)
    row(2,0) = 300 + (rnd(100)-50) : row(2,1) = 110 + (rnd(100)-50)
    row(3,0) = 300 - (rnd(150)-75) : row(3,1) = 200 + (rnd(150)-75)
END_SUB
rem ============================================================================
SUB Anim()
    repeat
         CreateInterpolated() : ' Interpoler la courbe de Bézier
         DrawCircleOnPath()   : ' Placer des cercles sur la courbe de Bézier
         JigglePoints()       : ' Changer légèrement les 4 points initiaux
         image_recopy()       : ' Pour un affichage sans clignotement
    until scancode <> 0
END_SUB
rem ============================================================================
' Interpoler la courbe
' Ici nous créons un ensemble à 100 éléments de points interpolés.
' Ceux-ci sont sur la courbe (spline) de Bézier
SUB CreateInterpolated()
    dim_local i,ix,x1,x2,x3,x4,y1,y2,y3,y4
    for i = 0 to 100
        ix = i/100
        x1 = (1-ix)*(1-ix)*(1-ix)*row(0,0) : y1 = (1-ix)*(1-ix)*(1-ix)*row(0,1)
        x2 = 3*(1-ix)*(1-ix)*ix*row(1,0)   : y2 = 3*(1-ix)*(1-ix)*ix*row(1,1)
        x3 = 3*(1-ix)*ix*ix*row(2,0)       : y3 = 3*(1-ix)*ix*ix*row(2,1)
        x4 = ix*ix*ix*row(3,0)             : y4 = ix*ix*ix*row(3,1)
        bezier(i,0) = x1+x2+x3+x4 : bezier(i,1) = y1+y2+y3+y4
    next i
END_SUB
rem ============================================================================
' Créez les cercles de taille diminuante et le miroir
' Pour tous les points sur la courbe de Bézier définie par bezier(),
SUB DrawCircleonPath()
    dim_local i, outer,inner,surf,surf2,r,g,b
'   cls : ' Mettre le CLS en REM pour voir des belles images!
    outer = 38 : r=10:g=10:b=10
    for i = 0 to 100
        r=r+2:g=g+2:b=b+2
        2d_fill_color 255,0,0 : 2d_pen_color rnd(r),g,b
        outer = outer - 0.34 : surf  = 420 + (260-bezier(i,1))
        if surf > 350
           2d_circle bezier(i,0),420+(260-bezier(i,1)),outer
           2d_circle 420+(260-bezier(i,0)),420+(260-bezier(i,1)),outer
        end_if
        if outer < 2
            2d_fill_color 255,0,0 : 2d_pen_color r,rnd(g),b: inner = 3
        else
            2d_fill_color rnd(30)+i,rnd(75)+i,rnd(150)+i
            2d_pen_color rnd(30)+i,rnd(75)+i,rnd(150)+i : inner = outer -1
        end_if
        if surf > 350
           2d_circle bezier(i,0),420+(260-bezier(i,1)),outer
           2d_circle 420+(260-bezier(i,0)),420+(260-bezier(i,1)),outer
        end_if
    next i
    outer = 38 : r=10:g=10:b=10
    for i = 0 to 100
        r=r+2:g=g+2:b=b+2
        2d_fill_color 255,0,0 : 2d_pen_color rnd(30)+i,rnd(75)+i,rnd(150)+i
        outer = outer - 0.34 : surf2 = bezier(i,1)
        if surf2 < 350
           2d_circle bezier(i,0),bezier(i,1),outer
           2d_circle 420+(260-bezier(i,0)),bezier(i,1),outer
        end_if
        if outer < 2
           2d_fill_color rnd(30)+i,rnd(75)+i,rnd(150)+i : 2d_pen_color rnd(r),g,b : inner = 3
        else
           2d_fill_color 60+i,150+i,155+i : 2d_pen_color r,g,rnd(b) : inner = outer -1
        end_if
        if surf2 < 350
           2d_circle bezier(i,0),bezier(i,1),inner
           2d_circle 420+(260-bezier(i,0)),bezier(i,1),inner
        end_if
    next i
END_SUB
rem ============================================================================
' Compenser les points de contrôle pour donner une impression de mouvement
SUB JigglePoints()
    row(0,0) = 300 : row(0,1) = 300
    if jp1 > p1   then incp1 = -0.2
    if jp1 < 0-p1 then incp1 =  0.2
    if jp2 > p2   then incp2 = -0.2
    if jp2 < 0-p2 then incp2 =  0.2
    if jp3 > p3   then incp3 = -0.2
    if jp3 < 0-p3 then incp3 =  0.2

    jp1 = jp1 + incp1 : jp2  = jp2 + incp2 : jp3 = jp3 + incp3 / 2
    if jq1 > q1   then incq1 = -0.2
    if jq1 < 0-q1 then incq1 =  0.2
    if jq2 > q2   then incq2 = -0.2
    if jq2 < 0-q2 then incq2 =  0.2
    if jq3 > q3   then incq3 = -0.2
    if jq3 < 0-q3 then incq3 =  0.2

    jq1 = jq1 + incq1 : jq2 = jq2 + incq2 : jq3 = jq3 + incq3 / 2
    row(0,0) = row(0,0) - jp3 : row(0,1) = row(0,1) - jq3
    row(1,0) = row(1,0) - jp1 : row(1,1) = row(1,1) - jq1
    row(2,0) = row(2,0) - jp2 : row(2,1) = row(2,1) - jq2
    row(3,0) = row(3,0) - jp3 : row(3,1) = row(3,1) - jq3
END_SUB
rem ============================================================================
' Merci à Silverman et Cosmos70 pour cette astuce
SUB image_recopy()
   2d_target_is 10 : 2d_image_copy 20,0,0,width(10),height(10)
   2d_target_is 0  : 2d_image_paste 20,left(10),top(10)
   2d_target_is 10
END_SUB
rem ============================================================================

A+


Dernière édition par Jean Claude le Mar 25 Aoû 2015 - 15:15, édité 1 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
JL35



Nombre de messages : 5920
Localisation : 77
Date d'inscription : 29/11/2007

MessageSujet: Re: Animation de courbe de Bézier cubique   Mar 25 Aoû 2015 - 15:10

Citation :
que japperais "tête de chat"
C'est pas plutôt les chiens qui jappent que les chats ?
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jean Claude

avatar

Nombre de messages : 4989
Age : 63
Localisation : 83 Var
Date d'inscription : 07/05/2009

MessageSujet: Re: Animation de courbe de Bézier cubique   Mar 25 Aoû 2015 - 15:16

JL35 a écrit:
Citation :
que japperais "tête de chat"
C'est pas plutôt les chiens qui jappent que les chats ?

Bien vu JL35, c'est corrigé. Very Happy
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
papydall

avatar

Nombre de messages : 5501
Age : 67
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

MessageSujet: Re: Animation de courbe de Bézier cubique   Mar 25 Aoû 2015 - 15:44

Moi, j’ai vu autre chose que  chiot, chat, ou la cigale et la fourmi ….
Mais, bon jappe qui peut ! si on veut.

Vive les courbes de béz(i)er!
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
jpcr

avatar

Nombre de messages : 276
Age : 50
Localisation : Val de Marne (94)
Date d'inscription : 06/05/2011

MessageSujet: Re: Animation de courbe de Bézier cubique   Mar 25 Aoû 2015 - 23:16

bravo, c’est très joli !!!
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://jeanpierre.creis.free.fr/Panoramic/Panoramic.html
papydall

avatar

Nombre de messages : 5501
Age : 67
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

MessageSujet: Re: Animation de courbe de Bézier cubique   Mar 25 Aoû 2015 - 23:21

Merci jpcr  sunny
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
Jicehel

avatar

Nombre de messages : 5849
Age : 45
Localisation : 77500
Date d'inscription : 19/04/2011

MessageSujet: Re: Animation de courbe de Bézier cubique   Mer 26 Aoû 2015 - 13:26

@Jean_Debord: C'est aussi typiquement le type de programme que tu pourrais adapter pour ton compilateur afin d'en apprécier les performances. Le visuel est déjà là, mais bien sûr, compilé, l'animation des images devrait être bien plus rapide.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Contenu sponsorisé




MessageSujet: Re: Animation de courbe de Bézier cubique   

Revenir en haut Aller en bas
 
Animation de courbe de Bézier cubique
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» stopper l'animation de second niveau
» ANIMATION
» Plusieurs diaporamas dans une animation
» Nouvelle animation .....[résolu merci]
» Projection animation

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC 32 bits :: Les inutilitaires-
Sauter vers: