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
» Gestion d'un système client-serveur.
Rotation d'un rectangle Emptypar Klaus Ven 17 Mai 2024 - 14:02

» item_index(résolu)
Rotation d'un rectangle Emptypar jjn4 Mar 14 Mai 2024 - 19:38

» Bataille terrestre
Rotation d'un rectangle Emptypar jjn4 Lun 13 Mai 2024 - 15:01

» SineCube
Rotation d'un rectangle Emptypar Marc Sam 11 Mai 2024 - 12:38

» Editeur EliP 6 : Le Tiny éditeur avec 25 onglets de travail
Rotation d'un rectangle Emptypar Marc Sam 11 Mai 2024 - 12:22

» Philharmusique
Rotation d'un rectangle Emptypar jjn4 Ven 10 Mai 2024 - 13:58

» PANORAMIC V 1
Rotation d'un rectangle Emptypar papydall Jeu 9 Mai 2024 - 3:22

» select intégrés [résolu]
Rotation d'un rectangle Emptypar jjn4 Mer 8 Mai 2024 - 17:00

» number_mouse_up
Rotation d'un rectangle Emptypar jjn4 Mer 8 Mai 2024 - 11:59

» Aide de PANORAMIC
Rotation d'un rectangle Emptypar jjn4 Mer 8 Mai 2024 - 11:16

» trop de fichiers en cours
Rotation d'un rectangle Emptypar lepetitmarocain Mer 8 Mai 2024 - 10:43

» Je teste PANORAMIC V 1 beta 1
Rotation d'un rectangle Emptypar papydall Mer 8 Mai 2024 - 4:17

» bouton dans autre form que 0(résolu)
Rotation d'un rectangle Emptypar leclode Lun 6 Mai 2024 - 13:59

» KGF_dll - nouvelles versions
Rotation d'un rectangle Emptypar Klaus Lun 6 Mai 2024 - 11:41

» @Jack
Rotation d'un rectangle Emptypar Jack Mar 30 Avr 2024 - 20:40

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Mai 2024
LunMarMerJeuVenSamDim
  12345
6789101112
13141516171819
20212223242526
2728293031  
CalendrierCalendrier
Le deal à ne pas rater :
Funko POP! Jumbo One Piece Kaido Dragon Form : où l’acheter ?
Voir le deal

 

 Rotation d'un rectangle

Aller en bas 
2 participants
AuteurMessage
JL35




Nombre de messages : 7095
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 : 7009
Age : 73
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 : 7095
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 : 7095
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
-
» Rectangle
» Rotation de bitmap
» Rotation de bitmap (bis)
» Rotation de texte
» Rotation Algorithm n°2

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: