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
» Calculus
par JL35 Aujourd'hui à 15:43

» plus de caractères avec chr$()
par Marc Aujourd'hui à 14:59

» Animations : Livres et leçons sur le français
par papydall Aujourd'hui à 3:22

» Animations FLASH pour différentes branches de la Science
par papydall Aujourd'hui à 2:54

» @ Jack : lapsus clavis
par Marc Hier à 19:19

» Question ?
par papydall Hier à 14:00

» Quelques nouvelles ...
par Ouf_ca_passe Ven 19 Jan 2018 - 18:07

» Mah-Jong français
par Jicehel Ven 19 Jan 2018 - 11:10

» Rotation d'une image d'un angle quelconque
par JL35 Jeu 18 Jan 2018 - 16:09

» StratégoV8 et V9
par Jean Claude Jeu 18 Jan 2018 - 14:22

» GRID_LOAD
par Jean Claude Mer 17 Jan 2018 - 21:04

» HVIEWER
par Yannick Mer 17 Jan 2018 - 20:31

» KGF_dll - nouvelles versions
par Klaus Mar 16 Jan 2018 - 21:28

» Déformation d'image en trapèze
par mindstorm Mar 16 Jan 2018 - 21:06

» Mah-Jong américain
par Jean Claude Lun 15 Jan 2018 - 19:37

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Janvier 2018
LunMarMerJeuVenSamDim
1234567
891011121314
15161718192021
22232425262728
293031    
CalendrierCalendrier

Partagez | 
 

 Les transformations affines

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

avatar

Nombre de messages : 5636
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 : 5877
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 : 5636
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/
Marc



Nombre de messages : 586
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 : 5636
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 : 8011
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 : 5636
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 : 8011
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: