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
» Pourquoi le compilateur stagne
par papydall Hier à 23:23

» Immortaliser les photos de famille
par jjn4 Hier à 18:29

» Concours de Morpions
par jjn4 Hier à 18:11

» Compilateur FBPano
par jean_debord Hier à 10:12

» Tout est tranquille
par Jean Claude Ven 22 Sep 2017 - 21:41

» Texte en gif animé
par JL35 Ven 22 Sep 2017 - 13:29

» BasicEditor
par Yannick Mer 20 Sep 2017 - 17:17

» Simuler l’appui d'une touche ou combinaison de touches.
par pascal10000 Lun 18 Sep 2017 - 19:30

» Utilisation de HVIEWER pour afficher des images
par papydall Lun 18 Sep 2017 - 17:43

» Panoramic et les gifs animés.
par papydall Lun 18 Sep 2017 - 16:32

» recover source
par pascal10000 Dim 17 Sep 2017 - 14:21

» Recent dans vos menu
par Jean Claude Sam 16 Sep 2017 - 11:41

» Comment centrer un texte 3D.
par pascal10000 Ven 15 Sep 2017 - 20:20

» Carte interface 16 entrées et 16 sorties
par Jicehel Ven 15 Sep 2017 - 16:30

» Version instantanée V 0.9.28i9 possédant l'objet SYNEDIT
par pascal10000 Ven 15 Sep 2017 - 16:20

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Septembre 2017
LunMarMerJeuVenSamDim
    123
45678910
11121314151617
18192021222324
252627282930 
CalendrierCalendrier

Partagez | 
 

 Les transformations affines

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

avatar

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

MessageSujet: Les transformations affines   Lun 14 Déc 2015 - 20:15

Quand j’étais en 2ème année Panoramic, j’ai posté un code sur la transformation conforme. C'était ici.
Je poste aujourd'hui un code sur les transformations affines

Rapel :
La transformation conforme conserve localement les angles, alors que les transformations affines conservent le parallélisme.

Code:

rem ============================================================================
rem             Transformations affines
rem                 par Papydall
rem ============================================================================
rem les transformations suivantes sont données avec leurs matrices de transformation
rem Etirement (changement d échelle) selon les axes
rem Rotation autour de l origine
rem Inclinaison le long de l axe des X
rem Inclinaison le long de l axe des Y
rem Déplacement relatif par rapport aux axes X et/ou Y
rem ============================================================================

Init()

Trace_Figure() : ' Tracer la flèche comme figure exemple
input bidon$ : cls

Etirement_Figure(1/4,1) : ' changement d'échelle (1/4 donc rapetissement) selon l'axe X, inchangé selon l'axe Y (1)
Etirement_Figure(2,1)   : ' changement d'échelle (2  donc agrandissement) selon l'axe X, inchangé selon l'axe Y (1)
Etirement_Figure(4,1/3) : ' Agrandissement 4 fois selon l'axe X et rapetissement 1/3 selon l'axe Y
caption 20,"Changement d'échelle selon les axes X et Y"
caption 20,caption$(20) + chr$(13) + string$(30," ") + "<Entree> pour la suite" : input bidon$ : cls

Rotation() : ' Rotation autour de l'origines des axes
caption 20, "<Entree> pour la suite"

Inclinaison_Figure("x",45) : ' Inclinaisons de 45° le long de de l'axe X
caption 20,"Inclinaison le long de l'axe des X de 45°"
caption 20,caption$(20) + chr$(13) + string$(20," ") + "<Entree> pour la suite" : input bidon$ : cls

Inclinaison_Figure("y",60) : ' Inclinaisons de 60° le long de de l'axe Y
caption 20,"Inclinaison le long de l'axe des Y de 60°"
caption 20,caption$(20) + chr$(13) + string$(20," ") + "<Entree> pour la suite" : input bidon$ : cls

Translation_Figure(-3,0) : ' Déplacement relatif par rapport à l'axe X
Translation_Figure(-5,6) : ' déplacement relatif par rapport aux deux axes X et Y
Translation_Figure(-9,-5): ' déplacement relatif par rapport aux deux axes X et Y
caption 20,"Translation de la figure <Entree> pour la suite" : input bidon$ : cls
caption 20,"That's all Folks !" + chr$(13) + "<Entree> pour terminer"
input bidon$
for a = 2*y0 to 10 step -10 : height 0,a : pause 50 : next a
terminate
end
rem ============================================================================
SUB Init()
    dim x0,y0,a,newx,newy,zoom,bidon$
    full_space 0
    picture 10 : full_space 10 : 2d_target_is 10 : print_target_is 10
    font_bold 10 : font_color 10,0,0,255
    font_size 10,12
    x0 = width(10)/2 : y0 = height(10)/2  : ' Coordonée de l'origine
    zoom = 30 : ' facteur d'aggrandissement
    alpha 20 : top 20,50 : left 20,100 : font_bold 20 : font_name 20,"tahoma"
    font_color 20 ,100,50,20 : font_size 20, 14 : color 20,255,255,255
    caption 20,"C'est sur cette flèche que nous allons tester les transformations affines :"
    caption 20,caption$(20) + chr$(13) + "Changement d'échelle selon les axes,"
    caption 20,caption$(20) + chr$(13) + "Rotation autour de l'origine,"
    caption 20,caption$(20) + chr$(13) + "Inclinaison le long des axes,"
    caption 20,caption$(20) + chr$(13) + "Déplacement relatif par rapport aux axes X et/ou Y."
    caption 20,caption$(20) + chr$(13) + string$(30," ") + "<Entree> pour commencer"

    degrees : ' on travaille en degrés
END_SUB
rem ============================================================================
' Tracé d'une flèche comme exemple
SUB Trace_Figure()
    dim_local i,p,x,y
    restore
    read p : read x : read y : 2d_poly_from x0 + zoom * x, y0 - zoom * y
    for i = 2 to p
        read x : read y : 2d_poly_to x0 + zoom * x,y0 - zoom * y
    next i
    2d_pen_color 255,0,0 : 2d_fill_color 255,0,0 : 2d_circle x0,y0,5
    2d_line x0-50,y0, x0+50,y0 : ' tracé de l'axe horizontal
    2d_line x0,y0-50, x0,y0+50 : ' tracé de l'axe vertical
    2d_pen_color 0,0,0
    read x : read y : 2d_flood x0 + zoom * x,y0 - zoom * y , 0,0,0
    2d_fill_color 255,255,255
    print_locate x0 + zoom * (x+2),y0 - zoom * (y-1) : print "Figure exemple"
END_SUB
rem ============================================================================
SUB Rotation()
    caption 20,"Rotation autour de l'origine ..."
    Trace_Figure() : ' on trace une figure , une flèche vers le haut comme exemple
' On va faire tourner cette figure autour de l'origine
    for a = 0 to 2*360 step 10 : ' Faire un tour complet
        cls : 2d_pen_color 255,0,0 : 2d_fill_color 255,0,0 : 2d_circle x0,y0,5
        2d_line x0-50,y0, x0+50,y0 : ' tracé de l'axe horizontal
        2d_line x0,y0-50, x0,y0+50 : ' tracé de l'axe vertical
        2d_pen_color 0,0,0
        Rotation_Figure(a)    : ' Faire tourner la figure
        pause 100
    next a

END_SUB
rem ============================================================================

' Rotation de la flèche de l'exemple autour de l'origine des axes d'un angle en dégrés
' Pour faire tourner une figure, il suffit de faire tourner tous ses points
SUB Rotation_Figure(angle)
    dim_local i,p,x,y
    restore
    read p : read x : read y : Rotation_Point(x,y,angle)
    2d_poly_from x0 + zoom * newx, y0 - zoom * newy
    for i = 2 to p
        read x : read y : Rotation_Point(x,y,angle)
        2d_poly_to x0 + zoom * newx,y0 - zoom * newy
    next i
    read x : read y : Rotation_Point(x,y,angle)
    2d_flood x0 + zoom * newx,y0 - zoom * newy , 0,0,0
    2d_fill_color 255,255,255
    print_locate x0 + zoom * (x+5),y0 - zoom * (y-1)
    print "Rotation de la figure autour de l'origine"
END_SUB
rem ============================================================================
' Rotation autour de l'origine d'un point (x,y) d'un angle tetha en degrés.
' Pour effectuer une rotation à un point il suffit de multiplier ses coordonnées
' par la matrice de rotation suivante :
' cos(tetha)   -sin(tetha)
' sin(tetha)    cos(tetha)
SUB Rotation_Point(x,y,tetha)
    newx =  x * cos(tetha) - y * sin(tetha)
    newy =  x * sin(tetha) + y * cos(tetha)
END_SUB
rem ============================================================================
' Inclinaison de la flèche de l'exemple le long de l'axe des X ou l'axe des Y
' d'un angle a en degrés
' paramètre : axe$ = "X" <---- inclinaison le long de l'axe des X
' paramètre : axe$ = "Y" <---- inclinaison le long de l'axe des Y
SUB Inclinaison_Figure(axe$,a)
    dim_local i,p,x,y
    if upper$(axe$) <> "X" and upper$(axe$) <> "Y"
       message "ERREUR !" + chr$(13) + "Vous avez indiqué un mauvais axe !"
       exit_sub
    end_if
    cls
    restore
    read p : read x : read y : Inclinaison_Point(x,y,axe$,a)
    2d_poly_from x0 + zoom * newx, y0 - zoom * newy
    for i = 2 to p
        read x : read y : Inclinaison_Point(x,y,axe$,a)
        2d_poly_to x0 + zoom * newx,y0 - zoom * newy
    next i
    2d_pen_color 255,0,0 : 2d_fill_color 255,0,0 : 2d_circle x0,y0,5
    2d_line x0-50,y0, x0+50,y0 : ' tracé de l'axe horizontal
    2d_line x0,y0-50, x0,y0+50 : ' tracé de l'axe vertical
    2d_pen_color 0,0,0
    read x : read y : Inclinaison_Point(x,y,axe$,a)
    2d_flood x0 + zoom * newx,y0 - zoom * newy , 0,0,0
    2d_fill_color 255,255,255
    if upper$(axe$) = "X"
       print_locate x0 + zoom * (x+5),y0 - zoom * (y-1)
    else
       print_locate x0 + zoom * (x+3),y0 - zoom * (y+5)
    end_if
    print "Inclinaison le long de l'axe " + upper$(axe$) + " d'un angle de " + str$(a) +"°"
END_SUB
rem ============================================================================
' Les matrices de l'inclinaison sont :
' le long de l'axe des X :
' 1  tan(a)
' 0   1
' Le long de l'axe des Y :
' 1      0
' tan(a) 1
SUB Inclinaison_Point(x,y,axe$,a)

    if upper$(axe$) = "X"
       newx =  x * 1 + y * tan(a)
       newy =  x * 0 + y * 1
    else
       newx = x * 1 + y * 0
       newy = x * tan(a) + y * 1
    end_if

END_SUB

rem ============================================================================
' Etirement de la flèche de l'exemple selon les axes X / Y
' Pour étirer une figure, il suffit d'étirer tous ses points
SUB Etirement_Figure(sx,sy)
    dim_local i,p,x,y
    restore
    read p : read x : read y : Etirer_Point(x,y,sx,sy)
    2d_poly_from x0 + zoom * newx, y0 - zoom * newy
    for i = 2 to p
        read x : read y : Etirer_Point(x,y,sx,sy)
        2d_poly_to x0 + zoom * newx,y0 - zoom * newy
    next i
    2d_pen_color 255,0,0 : 2d_fill_color 255,0,0 : 2d_circle x0,y0,5
    2d_line x0-50,y0, x0+50,y0 : ' tracé de l'axe horizontal
    2d_line x0,y0-50, x0,y0+50 : ' tracé de l'axe vertical
    2d_pen_color 0,0,0
    read x : read y : Etirer_Point(x,y,sx,sy)
    2d_flood x0 + zoom * newx,y0 - zoom * newy , 0,0,0
    2d_fill_color 255,255,255
    print_locate x0 + zoom * (x+4),y0 - zoom * (y-4)
    print "Etirement selon les axes X / Y"
END_SUB
rem ============================================================================
' Etirement d'un point (x,y) selon les axes d'un facteur sx et xy.
' Pour effectuer un étirement à un point il suffit de multiplier ses coordonnées
' par la matrice d'étirement suivante :
' sx  0
' 0   sy
SUB Etirer_Point(x,y,sx,sy)
    newx =  x * sx
    newy =  y * sy
END_SUB
rem ============================================================================
SUB Translation_Figure(tx,ty)
    dim_local i,p,x,y,t$
    restore
    read p : read x : read y : Translater_Point(x,y,tx,ty)
    2d_poly_from x0 + zoom * newx, y0 - zoom * newy
    for i = 2 to p
        read x : read y : Translater_Point(x,y,tx,ty)
        2d_poly_to x0 + zoom * newx,y0 - zoom * newy
    next i
    2d_pen_color 255,0,0 : 2d_fill_color 255,0,0 : 2d_circle x0,y0,5
    2d_line x0-50,y0, x0+50,y0 : ' tracé de l'axe horizontal
    2d_line x0,y0-50, x0,y0+50 : ' tracé de l'axe vertical
    2d_pen_color 0,0,0
    read x : read y : Translater_Point(x,y,tx,ty)
    2d_flood x0 + zoom * newx,y0 - zoom * newy , 0,0,0
    2d_fill_color 255,255,255
    print_locate x0 + zoom * (newx+2),y0 - zoom * (newy-1)
    if tx <> 0 and ty <> 0
       t$ = "aux axes X et Y"
    else
       if tx <> 0 and ty = 0
          t$ = "à l'axe X"
       else
          t$ = "à l'axe Y"
       end_if
    end_if
    print "Déplacement relatif par rapport " + t$
END_SUB
rem ============================================================================
SUB Translater_Point(x,y,tx,ty)
    newx = x + tx
    newy = y + ty
END_SUB
rem ============================================================================
' dessin d'une flèche
data 8    : ' nombre de points de la figure
data 3,0  : ' coordonnées 1er point
data 4,0  : ' coordonnées 2ème point
data 4,3
data 5,3
data 3.5,4.5
data 2,3
data 3,3
data 3,0  : ' coordonnées dernier point qui est le même que le 1er pour boucler la boucle
data 3.5,3 : ' coordonnées du flood
rem ============================================================================

Transformez, transformez, il en restera toujours ! sunny

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

avatar

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

MessageSujet: Re: Les transformations affines   Lun 14 Déc 2015 - 21:22

Tu as encore un sujet d'article que tu pourrais illustrer avec de beaux graphiques ....  Wink
Bon sinon à par ça, plein d'applications possibles dont par exemple pour les jeux en dessins vectoriels (mais il y en a des tas d'autres)


Dernière édition par Jicehel le Mar 15 Déc 2015 - 1:06, édité 1 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
papydall

avatar

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

MessageSujet: Re: Les transformations affines   Mar 15 Déc 2015 - 0:05

Je n’ai pas trop d’affinité pour un article sur les transformations affines. Crying or Very sad
Mais merci Jicehel pour le retour. Wink
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
Marc37



Nombre de messages : 447
Age : 56
Localisation : TOURS
Date d'inscription : 18/03/2014

MessageSujet: Re: Les transformations affines   Mar 15 Déc 2015 - 1:26

Super !
Décidément, tu ne t'arrêtes jamais !
Je reste bouche bée !
BRAVO et M E R C I ! ! !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
papydall

avatar

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

MessageSujet: Re: Les transformations affines   Mar 15 Déc 2015 - 1:44

Marc37 pour tes encouragements.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
Yannick

avatar

Nombre de messages : 7992
Age : 46
Localisation : Bretagne
Date d'inscription : 15/02/2010

MessageSujet: re   Mar 15 Déc 2015 - 1:45

C' est vrai que çà serait sympa un petit article.
Moi je dis çà mais je dis rien...
... Embarassed
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
papydall

avatar

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

MessageSujet: Re: Les transformations affines   Mar 15 Déc 2015 - 1:49

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

avatar

Nombre de messages : 7992
Age : 46
Localisation : Bretagne
Date d'inscription : 15/02/2010

MessageSujet: re   Mar 15 Déc 2015 - 1:51

Laughing
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Contenu sponsorisé




MessageSujet: Re: Les transformations affines   

Revenir en haut Aller en bas
 
Les transformations affines
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» [ACTEUR] Christian Bale, ses transformations

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: Vos sources, vos utilitaires à partager-
Sauter vers: