FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  MembresMembres  Connexion  
Derniers sujets
» Logiciel de planétarium.
Rotation d'un rectangle Emptypar Pedro Aujourd'hui à 8:08

» Un autre pense-bête...
Rotation d'un rectangle Emptypar Froggy One Jeu 21 Nov 2024 - 15:54

» Récupération du contenu d'une page html.
Rotation d'un rectangle Emptypar Pedro Sam 16 Nov 2024 - 14:04

» Décompilation
Rotation d'un rectangle Emptypar JL35 Mar 12 Nov 2024 - 19:57

» Un album photos comme du temps des grands-mères
Rotation d'un rectangle Emptypar jjn4 Mar 12 Nov 2024 - 17:23

» traitement d'une feuille excel
Rotation d'un rectangle Emptypar jjn4 Jeu 7 Nov 2024 - 3:52

» Aide-mémoire mensuel
Rotation d'un rectangle Emptypar jjn4 Lun 4 Nov 2024 - 18:56

» Des incomprèhension avec Timer
Rotation d'un rectangle Emptypar Klaus Mer 30 Oct 2024 - 18:26

» KGF_dll - nouvelles versions
Rotation d'un rectangle Emptypar Klaus Mar 29 Oct 2024 - 17:58

» instructions panoramic
Rotation d'un rectangle Emptypar maelilou Lun 28 Oct 2024 - 19:51

» Figures fractales
Rotation d'un rectangle Emptypar Marc Ven 25 Oct 2024 - 12:18

» Panoramic et Scanette
Rotation d'un rectangle Emptypar Yannick Mer 25 Sep 2024 - 22:16

» Editeur d étiquette avec QR évolutif
Rotation d'un rectangle Emptypar JL35 Lun 23 Sep 2024 - 22:40

» BUG QR Code DelphiZXingQRCode
Rotation d'un rectangle Emptypar Yannick Dim 22 Sep 2024 - 11:40

» fichier.exe
Rotation d'un rectangle Emptypar leclode Ven 20 Sep 2024 - 19:02

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Novembre 2024
LunMarMerJeuVenSamDim
    123
45678910
11121314151617
18192021222324
252627282930 
CalendrierCalendrier
Le Deal du moment : -17%
(Black Friday) Apple watch Apple SE GPS + Cellular ...
Voir le deal
249 €

 

 Rotation d'un rectangle

Aller en bas 
2 participants
AuteurMessage
JL35




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

Rotation d'un rectangle Empty
MessageSujet: Rotation d'un rectangle   Rotation d'un rectangle EmptySam 18 Aoû 2018 - 19:58

C'est tout simple, la rotation se fait autour du centre du rectangle, d'un angle donné.
On donne à la sub les coordonnées de l'angle supérieur gauche et les dimensions du rectangle d'origine, et l'angle de rotation en degrés dans le sens des aiguilles.
Code:
' Rotation d'un rectangle d'un angle donné
DIM x%,y%,w%,h%,an%
PICTURE 1: FULL_SPACE 1: 2D_TARGET_IS 1
x% = 100: y% = 100: w% = 300: h% = 200
2D_PEN_DOT: 2D_RECTANGLE x%,y%,x%+w%,y%+h%: ' référence, pour voir
an% = 30: ' rotation 30 degrés à droite
2D_PEN_SOLID: 2D_PEN_WIDTH 2
Rectangle_Rot(x%,y%,w%,h%,an%)
END
' ==============================================================================
SUB Rectangle_Rot(x%,y%,w%,h%,an%)
  ' Rectangle enveloppe en x%,y%, dimensions w%,h%, pivoté de an% degrés
  ' dans le sens des aiguilles (couleur et épaisseur du trait courants).
  DIM_LOCAL r,a%(4),a1%(4),i%,xc%,yc%,x1%,y1%
  DEGREES
  xc% = x%+w%/2: yc% = y%+h%/2: ' centre de rotation
  r = SQR(w%*w%/4 + h%*h%/4)
  a%(1) = ATN(h%/w%): a%(2) = 360-a%(1): a%(3) = 180+a%(1): a%(4) = 180-a%(1)
  FOR i% = 1 TO 4: a1%(i%)=a%(i%)+an%: NEXT i%
  x1% = xc%+r*COS(a1%(1)): y1% = yc%+r*SIN(a1%(1)): 2D_POLY_FROM x1%,y1%
  x% = xc%+r*COS(a1%(2)): y% = yc%+r*SIN(a1%(2)): 2D_POLY_TO x%,y%
  x% = xc%+r*COS(a1%(3)): y% = yc%+r*SIN(a1%(3)): 2D_POLY_TO x%,y%
  x% = xc%+r*COS(a1%(4)): y% = yc%+r*SIN(a1%(4)): 2D_POLY_TO x%,y%
  2D_POLY_TO x1%,y1%
END_SUB
' ==============================================================================
Rotation d'un rectangle Rect10
NB la rotation ne concerne que l'enveloppe du rectangle, pas son contenu.
Revenir en haut Aller en bas
papydall

papydall


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

Rotation d'un rectangle Empty
MessageSujet: Re: Rotation d'un rectangle   Rotation d'un rectangle EmptySam 18 Aoû 2018 - 22:54

Salut JL35.
Ton rectangle a bien fait sa rotation.
Bravo pour les deux (heu ...  je vœux dire le rectangle et toi !)

Bon, voici une autre approche pour faire tourner à peu près toute figure.

Pour incliner  une figure il suffit d’appliquer la matrice de rotation à tous les points de la figure.

https://panoramic.1fr1.net/t4891-un-cour-incline-une-ellipse-inclinee?highlight=ellipse
https://panoramic.1fr1.net/t3755-rotation-dune-figure-autour-de-lorigine?highlight=rotation


Application :

Code:

rem ============================================================================
rem             Rotation d’une figure autour de l’origine
rem                     par Papydall
rem ============================================================================
dim x0,y0,a,newx,newy, zoom
picture 10 : full_space 10 : 2d_target_is 10
x0 = width(10)/2 : y0 = height(10)/2  : ' Coordonée de l'origine
zoom = 30 : ' facteur d'aggrandissement

Trace_Figure() : ' on trace une figure , une flèche vers le haut comme exemple

' On va tourner cette figure autour de l'origine
for a = 0 to 360 step 10 : ' Faire un tour complet
    cls
    2d_line 0,y0, 2*x0,y0 : ' tracé de l'axe horizontal
    2d_line x0,0, x0,2*y0 : ' tracé de l'axe vertcal
    Rotation_Figure(a)    : ' Tourner la figure
    pause 50
next a

end
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
END_SUB
rem ============================================================================
' Rotation de la flèche de l'exemple autour de l'origine des axes d'un angle en degré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
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)
    dim_local rad,t
    rad = pi/180 : t = rad * tetha
    newx =  x * cos(t) - y * sin(t)
    newy =  x * sin(t) + y * cos(t)
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 derner point qui est le même que le 1erpour boucler la boucle
rem ============================================================================


Code:

rem ============================================================================
rem                  Inclinaison d’une figure
rem ============================================================================
rem Pour incliner une figure, il suffit d’appliquer la matrice de rotation à
rem tous les points de la figure.
rem ============================================================================
rem
rem    __________________________________________________
rem   |                                                  |
rem   | xp = cx + (x1*cos(IncliDeg) - y1*sin(Inclideg))  |
rem   | yp = cy - (x1*sin(IncliDeg) + y1*cos(IncliDeg))  |
rem   |__________________________________________________|
rem
rem   xp,yp    : coordonnées du point à tracer
rem   cx,cy    : coordonnées du centre de la figure
rem   x1,y1    : coordonnées du point avant rotation
rem   IncliDeg : valeur de l’angle de rotation (en degré) , sens trigonométrique
rem ============================================================================
rem Application :
rem Tracer une ellipse inclinée    
rem Appel : Ellipse_Inclinee(cx,cy,rx,ry,IncliDeg)

    2d_pen_color 255,0,0 : Ellipse_Inclinee(300,220,200,100,30)
    2d_pen_color 0,0,255 : Ellipse_Inclinee(300,220,200,100,150)

end
rem ============================================================================

' cx,cy : coordonnées du centre de rotation de l'ellipse
' Rx et Ry sont les longueurs des demi-diagonales
' IncliDeg : inclinaison en degrés de l'ellipse dans le sens trigonométrique

SUB Ellipse_Inclinee(cx,cy,rx,ry,IncliDeg)
    dim_local a,x1,y1,xp,yp
    degrees
    IncliDeg = 0-IncliDeg
    ' Calcul du point Origine
    x1 = rx*sin(IncliDeg) : y1 = ry*cos(IncliDeg)
    xp = cx + (x1*cos(IncliDeg) - y1*sin(IncliDeg))
    yp = cy + (x1*sin(IncliDeg) + y1*cos(IncliDeg))
    2d_poly_from xp,yp

    for a = 0 to 360
        x1 = rx*sin(a + IncliDeg) : y1 = ry*cos(a + IncliDeg)
        ' Application de la matrice de rotation par rapport au centre cx,cy
        xp = cx + (x1*cos(IncliDeg) - y1*sin(IncliDeg))
        yp = cy + (x1*sin(IncliDeg) + y1*cos(IncliDeg))
        2d_poly_to xp,yp
    next a
END_SUB
rem ============================================================================


Code:

rem ============================================================================
rem        Inclinaison
rem ============================================================================

Incliner()
end
rem ============================================================================
SUB Incliner()
   dim_local a
   degrees
   for a = 0 to 360 step 30
       cls
       Coeur_Incline(300,250,100,a)
       Ellipse_Inclinee(100,250,100,50,a)
       pause 1000
   next a
END_SUB
rem ============================================================================
' cx,cy = coordonnées du creux du coeur
' Ro = rayon du coeur
' IncliDeg = inclinaison en degrés du coeur par rapport à la verticale
SUB Coeur_Incline(cx,cy,ro,IncliDeg)
   dim_local a,Theta,x1,y1,xp,yp
   degrees
   2d_pen_width 2
   ' Calcul du point Origine
   x1 = sin(IncliDeg) : x1 = Ro*x1*x1*x1
   y1 = cos(IncliDeg) : y1 = Ro*(y1-y1*y1*y1*y1)
   xp = cx + (x1*cos(IncliDeg) - y1*sin(Inclideg))
   yp = cy - (x1*sin(IncliDeg) + y1*cos(IncliDeg))
   2d_poly_from xp,yp
   for a = 0 to 360
       ' Calcul du vecteur du Coeur avec Formule de Raphaël Laporte
       Theta = a + IncliDeg
       x1 = sin(Theta) : x1 = Ro*x1*x1*x1
       y1 = cos(Theta) : y1 = Ro*(y1-y1*y1*y1*y1)
      ' Application de la matrice de rotation par rapport au centre cx,cy
       xp = cx + (x1*cos(IncliDeg) - y1*sin(Inclideg))
       yp = cy - (x1*sin(IncliDeg) + y1*cos(IncliDeg))
       2d_poly_to xp,yp
   next a

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

' cx,cy : coordonnées du centre de rotation de l'ellipse
' Rx et Ry sont les longueurs des demi-diagonales
' IncliDeg : inclinaison en degrés de l'ellipse par rapport à la verticale

SUB Ellipse_Inclinee(cx,cy,rx,ry,IncliDeg)
   dim_local a,x1,y1,xp,yp
   degrees
   2d_pen_width 2
   ' Calcul du point Origine
   x1 = rx*sin(IncliDeg) : y1 = ry*cos(IncliDeg)
   xp = cx + (x1*cos(IncliDeg) - y1*sin(IncliDeg))
   yp = cy + (x1*sin(IncliDeg) + y1*cos(IncliDeg))
   2d_poly_from xp,yp

   for a = 0 to 360
       x1 = rx*sin(a + IncliDeg) : y1 = ry*cos(a + IncliDeg)
       ' Application de la matrice de rotation par rapport au centre cx,cy
       xp = cx + (x1*cos(IncliDeg) - y1*sin(IncliDeg))
       yp = cy + (x1*sin(IncliDeg) + y1*cos(IncliDeg))
       2d_poly_to xp,yp
   next a
END_SUB
rem ============================================================================
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
JL35




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

Rotation d'un rectangle Empty
MessageSujet: Re: Rotation d'un rectangle   Rotation d'un rectangle EmptySam 18 Aoû 2018 - 23:10

Bonsoir papydall,
Effectivement j'ai fait au plus simple (simpliste ?) mais il me semblait bien que tu avais une solution bien plus universelle...
(je cherchais notamment la rotation d'ellipse...)
Je note soigneusement tout ça, et merci à toi.

Je vais maintenant m'attaquer à la rotation du cercle Very Happy
Revenir en haut Aller en bas
JL35




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

Rotation d'un rectangle Empty
MessageSujet: Re: Rotation d'un rectangle   Rotation d'un rectangle EmptySam 18 Aoû 2018 - 23:12

erreur...
Revenir en haut Aller en bas
Contenu sponsorisé





Rotation d'un rectangle Empty
MessageSujet: Re: Rotation d'un rectangle   Rotation d'un rectangle Empty

Revenir en haut Aller en bas
 
Rotation d'un rectangle
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Rotation de texte
» Rectangle derviche
» Rectangle derviche
» Rotation de bitmap
» Rotation de bitmap (bis)

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: