Rotation d'Ellipse & Pie Chart 3D Animés

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Avatar de l’utilisateur
kernadec
Messages : 1594
Inscription : ven. 25/avr./2008 11:14

Re: Rotation d'Ellipse

Message par kernadec »

bonjour
@Micoute merci c'est cool :D

@frenchyPilou, ouiii nous savons tous ici que le fromage des pizzas et rempli de colorants :mrgreen: :mrgreen:
merci pour le lien des plugins graphiques

Voici une autre option avec l' animation des parts de fromage :D

Cordialement

Code : Tout sélectionner

Procedure Ellipse_rotation(Axex.l, Axey.l, Xrayon.l, Yrayon.l, Rot.d, Debut.l, Fin.l, Couleur.l) 
  
  Protected angle.d, R.d, X.d, Y.d, Posx1.l, Posy1.l, Posx2.l, Posy2.l
  
  R = Radian(Rot)
  
  For o = Debut To fin 
    
    Angle = Radian(o)
    
    x =  Cos(Angle) * Xrayon                          
    y = -Sin(Angle) * Yrayon
    
    Posx1 = Round(X * Cos(R) + Y * Sin(R), #PB_Round_Nearest) + Axex  ;round pour un meilleur tracé
    Posy1 = Round(X * Sin(R) - Y * Cos(R), #PB_Round_Nearest) + Axey
    
    If Posx2 = 0 And Posy2 = 0 : Posx2 = Posx1 : Posy2 = Posy1 : EndIf
    
    LineXY(Posx2, Posy2, Posx1, Posy1, Couleur)
    
    Posx2 = Posx1
    Posy2 = Posy1
    
  Next o  
  
EndProcedure

Procedure chart(Axex.l, Axey.l, Xrayon.l, Yrayon.l, Rot.d, Debut.l, Fin.l, Couleur1.l,Couleur2.l)
  
  If  Debut > fin : Swap Debut , Fin : EndIf
  
  Ellipse_rotation(Axex, Axey, Xrayon, Yrayon, Rot.d, Debut, Fin, Couleur1)
  
  x.l = Axex + Xrayon * Cos(Radian(Debut))
  y.l = Axey + Yrayon * Sin(Radian(Debut))
  LineXY(Axex, Axey, x , y,  Couleur1)
  
  x = Axex + Xrayon * Cos(Radian(Fin))
  y = Axey + Yrayon * Sin(Radian(Fin))
  LineXY(Axex, Axey, x , y,  Couleur1)
  
  If  couleur1 <> couleur2
    x = Axex + (Xrayon - 2 ) * Cos(Radian(debut + (Fin - debut) / 2 ))
    y = Axey + (Yrayon - 2 ) * Sin(Radian(debut + (Fin - debut) / 2 ))
    
    FillArea(x, y, Couleur1, Couleur2)
  EndIf
  
EndProcedure  

Procedure chartman(Axex, Axey, Xrayon, Yrayon, Debut, Fin)
  
  For u = 1 To 4
    Couleur1.l = RGB(Random(255) ,Random(255), Random(255))  
    
    For i = 1 To 80 
      StartDrawing(CanvasOutput(0))
      Chart(Axex, Axey, Xrayon, Yrayon, 0 , 160, 240, RGB(254, 255, 255),RGB(255, 255, 255))
      Chart(Axex, Axey, Xrayon, Yrayon, 0 , Debut - i, Fin, RGB(253, 255, 255), Couleur1)
      
      StopDrawing()
    Next i
    
    For i = 80 To 1 Step -1 
      StartDrawing(CanvasOutput(0))
      Chart(Axex, Axey, Xrayon, Yrayon, 0 , 160, 240, RGB(254, 255, 255),RGB(255, 255, 255))
      Chart(Axex, Axey, Xrayon, Yrayon, 0 , Debut - i, Fin, RGB(253, 255, 255), Couleur1)
      
      If i = 1
        Chart(Axex, Axey, Xrayon, Yrayon, 0 , 160, 240, RGB(254, 255, 255),RGB(255, 255, 255))
      EndIf
      StopDrawing()
    Next i
  Next u
  
EndProcedure 

If OpenWindow(0, 0, 0, 500,500, "Exemple Graphique Chart 3D", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  CanvasGadget(0, 10, 10, 480, 480)
  
  
  Axex.l = 205
  Axey.l = 225
  Xrayon.l = 190
  Yrayon.l = 70
  Debut.l = 160 - 2  ;retirer 2 unités que pour la couleur de surface soit dans son secteur
  Fin.l = 240
  
  For fin = 160 To 240 
    StartDrawing(CanvasOutput(0))
    For i = 1 To 14
      Chart(Axex, i+Axey, Xrayon, Yrayon, 0 , Debut, Fin, RGB(0, 100, 171),RGB(100, 0, 170))
    Next i
    Chart(Axex, Axey, Xrayon, Yrayon, 0 , Debut, Fin, RGB(0, 0, 226),RGB(0, 0,225))
    StopDrawing()
    Delay(15)
  Next fin
  
  
  Axex = 235
  Axey = 220
  Xrayon = 196
  Yrayon = 70
  Debut = 242 - 2  ;retirer 2 unités que pour la couleur de surface soit dans son secteur
  Fin = 315
  
  For fin = 242 To 315 
    StartDrawing(CanvasOutput(0))
    For i = 1 To 16 
      Chart(Axex, i+Axey, Xrayon, Yrayon, 0 , Debut, Fin, RGB(2, 182, 2),RGB(0, 180, 0))
    Next i
    Chart(Axex, Axey, Xrayon, Yrayon, 0 , Debut, Fin, RGB(0, 226, 0),RGB(0, 225, 0))
    StopDrawing()
    Delay(15)
  Next fin
  
  
  
  Axex = 245
  Axey = 245
  Xrayon = 220
  Yrayon = 72
  Debut = -48 - 2 ;retirer 2 unités que pour la couleur de surface soit dans son secteur
  Fin = 158
  
  
  For fin = -48 To 158 
    StartDrawing(CanvasOutput(0))
    For i = 1 To 20 
      Chart(Axex, i+Axey, Xrayon, Yrayon, 0 , Debut, fin, RGB(225, 181, 0),RGB(225, 180, 0))
    Next i
    Chart(Axex, Axey, Xrayon, Yrayon, 0 , Debut, fin, RGB(225, 226, 0),RGB(225, 225, 0))
    StopDrawing()
    Delay(5)
  Next fin
  
  Repeat
   Until WaitWindowEvent()  = #PB_Event_CloseWindow
EndIf
Avatar de l’utilisateur
Micoute
Messages : 2522
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Rotation d'Ellipse

Message par Micoute »

C'est tout bonnement génial, merci encore !
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.73 PB 6.00 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
Ar-S
Messages : 9478
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Rotation d'Ellipse

Message par Ar-S »

Très sympa avec l'anim.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
MLD
Messages : 1105
Inscription : jeu. 05/févr./2009 17:58
Localisation : Bretagne

Re: Rotation d'Ellipse

Message par MLD »

Super Merci du partage. Je m'en servirais certainement.
Avatar de l’utilisateur
kernadec
Messages : 1594
Inscription : ven. 25/avr./2008 11:14

Re: Rotation d'Ellipse

Message par kernadec »

Bonjour
Merci pour vos encouragements :D
Mais à l' usage, Je me suis aperçu que l'on pourrait avoir aussi un mode rétro des charts :D
avec quelques petits changement, car je ne sais pas encore pourquoi :?
mais au retour on est obligé de réduire la boucle épaisseur car les charts augmente leur hauteur bizarre 8O

Cordialement

Code : Tout sélectionner

Procedure Ellipse_rotation(Axex.l, Axey.l, Xrayon.d, Yrayon.d, Rot.d, Debut.l, Fin.l, Couleur.l) 
  ; procedure ellipse by kernadec
  Protected angle.d, R.d, X.d, Y.d, Posx1.l, Posy1.l, Posx2.l, Posy2.l
  
  R = Radian(Rot)
  
  For o = Debut To fin 
    
    Angle = Radian(o)
    
    x =   Cos(Angle) * Xrayon                          
    y = - Sin(Angle) * Yrayon 
    
    Posx1 = Round(X * Cos(R) + Y * Sin(R), #PB_Round_Nearest) + Axex  ;round pour un meilleur tracé
    Posy1 = Round(X * Sin(R) - Y * Cos(R), #PB_Round_Nearest) + Axey  ;round For a better traced
    
    If Posx2 = 0 And Posy2 = 0 : Posx2 = Posx1 : Posy2 = Posy1 : EndIf
    
    LineXY(Posx2, Posy2, Posx1, Posy1, Couleur)
    
    Posx2 = Posx1
    Posy2 = Posy1
    
  Next o  
  
EndProcedure

Procedure chart(Axex.l, Axey.l, Xrayon.d, Yrayon.d, Rot.d, Debut.l, Fin.l, Couleur1.l,Couleur2.l)
  ; Procedure chart by kernadec
  If  Debut > fin : Swap Debut , Fin : EndIf
  
  Ellipse_rotation(Axex, Axey, Xrayon, Yrayon, Rot.d, Debut, Fin, Couleur1)
  
  x.l = Axex + Xrayon * Cos(Radian(Debut))
  y.l = Axey + Yrayon * Sin(Radian(Debut))
  LineXY(Axex, Axey, x , y,  Couleur1)
  
  x = Axex + Xrayon * Cos(Radian(Fin))
  y = Axey + Yrayon * Sin(Radian(Fin))                                 
  LineXY(Axex, Axey, x , y,  Couleur1)
  ; Calculating the size of the sector for Fillarea()
  Secteur.l = Abs(Fin - debut)                 ; Calcul la taille du secteur pour Fillarea()
  
  If  couleur1 <> couleur2 And Secteur > 1
    
    x = Axex + ((Xrayon + 0.001) - 2 ) * Cos(Radian(debut + (Fin - debut) / 2 ))  ;point medium 
    y = Axey + ((Yrayon + 0.001) - 2 ) * Sin(Radian(debut + (Fin - debut) / 2 ))
    
    FillArea(x, y, Couleur1, Couleur2)
    
  EndIf
  
EndProcedure 

Procedure efface_chart(Axex.l, Axey.l, Xrayon.d, Yrayon.d, fin.l, Debut.l, Taille.l, Couleur1.l, Couleur2.l)
  
  ; Clears the full chart object.../  set starting loop thickness To 0 To clear all pixels
  For i = 0 To  Taille + 1     ; efface l'objet chart entier  départ de la  boucle = 0
    Chart(Axex, i + Axey, Xrayon, Yrayon, 0, fin, Debut, Couleur1, Couleur2)
  Next i
  Chart(Axex, Axey, Xrayon, Yrayon, 0, fin, Debut, Couleur1, Couleur2)
  
EndProcedure 



If OpenWindow(0, 0, 0, 500,500, "Exemple Pie Chart 3D animé", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  CanvasGadget(0, 10, 10, 480, 480)
  
  ;**********************************************************************************************************
  
  Taille.l = 13
  Axex.l = 205
  Axey.l = 225
  Xrayon.d = 190
  Yrayon.d = 75      
  Debut.l = 160 
  Fin.l = 240
  
  For u = 1 To Abs(fin - debut)                        ; Blue
    
    StartDrawing(CanvasOutput(0))
    
    For i = 1 To Taille
      Chart(Axex, i + Axey, Xrayon, Yrayon, 0 , Debut  , Debut + u , RGB(0, 100, 171),RGB(100, 0, 170))
    Next i
    Chart(Axex, Axey, Xrayon, Yrayon, 0 , Debut  , Debut + u , RGB(0, 0, 226),RGB(0, 0, 225))
    
    StopDrawing()
    
    Delay(5)
  Next u
  
  ;**********************************************************************************************************
  
  Taille = 16
  Axex = 235
  Axey = 220
  Xrayon = 200
  Yrayon = 75   
  Debut = 240
  Fin = 315
  
  For u = 1 To Abs(fin - debut)                        ; Green
    
    StartDrawing(CanvasOutput(0))
    
    For i = 1 To Taille
      Chart(Axex, i + Axey, Xrayon, Yrayon, 0 , Debut, Debut + u , RGB(2, 182, 2),RGB(0, 180, 0))
    Next i
    Chart(Axex, Axey, Xrayon, Yrayon, 0 , Debut, Debut + u , RGB(0, 226, 0),RGB(0, 225, 0))
    
    StopDrawing()
    
    Delay(5)
    
  Next u
  
  ;**********************************************************************************************************
  
  Taille = 18
  Axex = 250
  Axey = 245
  Xrayon = 220
  Yrayon = 75       
  Debut = - 48 
  Fin = 160
  
  For u = 1 To Abs(fin - debut)                        ; Yellow
    
    StartDrawing(CanvasOutput(0))
    
    For i = 1 To Taille
      Chart(Axex, i + Axey, Xrayon, Yrayon, 0 , Debut, Debut + u, RGB(225, 181, 0),RGB(225, 180, 0))
    Next i
    Chart(Axex, Axey, Xrayon, Yrayon, 0 , Debut, Debut + u, RGB(225, 226, 0),RGB(225, 225, 0))
    
    StopDrawing()
    
  Next u
  
  ;***********************************   CHART EN MODE RETRO  ***********************************************
  
  ;   Taille = 18
  ;   Axex = 250
  ;   Axey = 245
  ;   Xrayon = 220
  ;   Yrayon = 75       
  ;   Debut = - 48
  ;   Fin = 160 
  
  For u = Abs(fin - debut) To 1 Step - 1               ; Yellow
    
    StartDrawing(CanvasOutput(0))
    
    efface_chart(Axex, Axey, Xrayon, Yrayon, fin, Debut, Taille, RGB(254, 255, 255),RGB(255, 255, 255))
    ; redraws the object modified chart mode-return
    For i = 1 To Taille     ; redessine l'objet chart modifié mode-retro
      Chart(Axex, i + Axey, Xrayon, Yrayon, 0 , Debut, fin - (Abs(Debut - fin) - u), RGB(225, 181, 0),RGB(225, 180, 0))
    Next i
    Chart(Axex, Axey, Xrayon, Yrayon, 0 , Debut, fin - (Abs(Debut - fin) - u), RGB(225, 226, 0),RGB(225, 225, 0))
    
    StopDrawing()      
    
  Next u
  
  StartDrawing(CanvasOutput(0)) 
  
  efface_chart(Axex, Axey, Xrayon, Yrayon, fin, Debut, Taille, RGB(254, 255, 255),RGB(255, 255, 255))
  
  StopDrawing()
  
  ;**********************************************************************************************************
  
  Taille = 16
  Axex = 235
  Axey = 220
  Xrayon = 200    
  Yrayon = 75     
  Debut = 240
  Fin = 315 
  
  For u = Abs(fin - debut) To 1 Step - 1              ; Green
    
    StartDrawing(CanvasOutput(0))
    
    efface_chart(Axex, Axey, Xrayon, Yrayon, fin, Debut, Taille, RGB(254, 255, 255),RGB(255, 255, 255))
    ; redraws the object modified chart mode-return
    For i = 1 To Taille     ; redessine l'objet chart modifié mode-retro
      Chart(Axex, i + Axey, Xrayon, Yrayon, 0 , Debut, fin - (Abs(Debut - fin) - u),  RGB(2, 182, 2),RGB(0, 180, 0))
    Next i
    Chart(Axex, Axey, Xrayon, Yrayon, 0 , Debut, fin - (Abs(Debut - fin) - u), RGB(0, 226, 0),RGB(0, 225, 0))
    
    StopDrawing() 
    
    Delay(5)
  Next u
  
  StartDrawing(CanvasOutput(0)) 
  
  efface_chart(Axex, Axey, Xrayon, Yrayon, fin, Debut, Taille, RGB(254, 255, 255),RGB(255, 255, 255))
  
  StopDrawing()
  
  ;********************************************************************************************************** 
  
  Taille = 14
  Axex = 205
  Axey = 225
  Xrayon = 190
  Yrayon = 75      
  Debut = 160
  Fin = 240
  
  For u = Abs(fin - debut) To 1 Step - 1              ; Blue
    
    StartDrawing(CanvasOutput(0))
    
    efface_chart(Axex, Axey, Xrayon, Yrayon, fin, Debut, Taille, RGB(254, 255, 255),RGB(255, 255, 255))
    ; redraws the object modified chart mode-return
    For i = 1 To Taille     ; redessine l'objet chart modifié mode-retro
      Chart(Axex, i + Axey, Xrayon, Yrayon, 0 , Debut, fin - (Abs(Debut - fin) - u),  RGB(0, 100, 171),RGB(100, 0, 170))
    Next i
    Chart(Axex, Axey, Xrayon, Yrayon, 0 ,Debut, fin - (Abs(Debut - fin) - u), RGB(0, 0, 226),RGB(0, 0, 225))
    
    StopDrawing()     
    
    Delay(5)
  Next u
  
  StartDrawing(CanvasOutput(0)) 
  
  efface_chart(Axex, Axey, Xrayon, Yrayon, fin, Debut, Taille, RGB(254, 255, 255),RGB(255, 255, 255))
  
  StopDrawing()
  
  ;********************************************************************************************************** 
  
  StartDrawing(CanvasOutput(0))
  DrawText(70, 70, "ROTATIONS  CONTRAIRES  AUX  PRECEDENTES", RGB(0, 0, 0),RGB(255, 255, 225))
  StopDrawing()
  
  Delay(1000)
  
  ;*********************************** ROTATIONS CONTRAIRE AUX PRECEDENTES ***********************************
  ;*********************************** ROTATIONS CONTRARY TO THE PREVIOUS  ***********************************
  
  Taille = 18
  Axex = 250
  Axey = 245
  Xrayon = 220
  Yrayon = 75       
  Debut = - 48 
  Fin = 160
  
  For u = 1 To Abs(fin - debut)                        ; Yellow
    
    StartDrawing(CanvasOutput(0))
    
    For i = 1 To Taille
      Chart(Axex, i + Axey, Xrayon, Yrayon, 0 , Fin, Fin - u, RGB(225, 181, 0), RGB(225, 180, 0))
    Next i
    Chart(Axex, Axey, Xrayon, Yrayon, 0 , Fin, Fin - u, RGB(225, 226, 0), RGB(225, 225, 0))
    
    StopDrawing()
    
  Next u
  
  ;**********************************************************************************************************
  
  Taille = 16
  Axex = 235
  Axey = 220
  Xrayon = 200    
  Yrayon = 75     
  Debut = 240
  Fin = 315 
  
  For u = 1 To Abs(fin - debut)                        ; Green
    
    StartDrawing(CanvasOutput(0))
    
    For i = 1 To 16 
      Chart(Axex, i + Axey, Xrayon, Yrayon, 0 , Fin, Fin - u, RGB(2, 182, 2), RGB(0, 180, 0))
    Next i
    Chart(Axex, Axey, Xrayon, Yrayon, 0 , Fin, Fin - u, RGB(0, 226, 0), RGB(0, 225, 0))
    
    StopDrawing()
    
    Delay(5)
  Next u
  
  ;**********************************************************************************************************
  
  Taille = 14
  Axex = 205
  Axey = 225
  Xrayon = 190
  Yrayon = 75
  Debut = 160
  Fin = 240 
  
  For u = 1 To Abs(fin - debut)                        ; Blue
    
    StartDrawing(CanvasOutput(0))
    
    For i = 1 To 14
      Chart(Axex, i + Axey, Xrayon, Yrayon, 0 , Fin, Fin - u, RGB(0, 100, 171), RGB(100, 0, 170))
    Next i
    Chart(Axex, Axey, Xrayon, Yrayon, 0 , Fin, Fin - u, RGB(0, 0, 226), RGB(0, 0,225))
    
    StopDrawing()
    
    Delay(5)
  Next u   
  
  ;***********************************   CHART ROTATION CONTRAIRE MODE RETRO  *********************************
  
  ;   Taille = 14
  ;   Axex = 205
  ;   Axey = 225
  ;   Xrayon = 190
  ;   Yrayon = 75      
  ;   Debut = 160
  ;   Fin = 240
  
  For u = Abs(fin - debut) To 1   Step - 1             ; Blue
    
    StartDrawing(CanvasOutput(0))
    
    efface_chart(Axex, Axey, Xrayon, Yrayon, fin, Debut, Taille, RGB(254, 255, 255), RGB(255, 255, 255))
    ; redraws the object modified chart mode-return
    For i = 1 To Taille     ; redessine l'objet chart modifié mode-retro
      Chart(Axex, i + Axey, Xrayon, Yrayon, 0 , debut + (Abs(Debut - fin ) - u), Fin,  RGB(0, 100, 171), RGB(100, 0, 170))
    Next i
    Chart(Axex, Axey, Xrayon, Yrayon, 0 , debut + (Abs(Debut - fin ) - u), Fin, RGB(0, 0, 226), RGB(0, 0, 225))
    
    StopDrawing()      
    
    Delay(5)
  Next u
  StartDrawing(CanvasOutput(0)) 
  
  efface_chart(Axex, Axey, Xrayon, Yrayon, fin, Debut, Taille, RGB(254, 255, 255),RGB(255, 255, 255))
  
  StopDrawing()
  
  ;**********************************************************************************************************
  
  Taille = 16
  Axex = 235
  Axey = 220
  Xrayon = 200    
  Yrayon = 75     
  Debut = 240
  Fin = 315 
  
  
  For u = Abs(fin - debut) To 1 Step - 1        ; Green
    
    StartDrawing(CanvasOutput(0))
    
    efface_chart(Axex, Axey, Xrayon, Yrayon, fin, Debut, Taille, RGB(254, 255, 255), RGB(255, 255, 255))
    ; redraws the object modified chart mode-return
    For i = 1 To Taille     ; redessine l'objet chart modifié mode-retro
      Chart(Axex, i + Axey, Xrayon, Yrayon, 0, debut + (Abs(Debut - fin ) - u), Fin, RGB(2, 182, 2), RGB(0, 180, 0))
    Next i
    Chart(Axex, Axey, Xrayon, Yrayon, 0 , debut + (Abs(Debut - fin ) - u), Fin, RGB(0, 226, 0), RGB(0, 225, 0))
    
    StopDrawing()      
    
    Delay(5)
  Next u
  
  StartDrawing(CanvasOutput(0)) 
  
  efface_chart(Axex, Axey, Xrayon, Yrayon, fin, Debut, Taille, RGB(254, 255, 255),RGB(255, 255, 255))
  
  StopDrawing()
  
  ;**********************************************************************************************************
  
  Taille = 18
  Axex = 250
  Axey = 245
  Xrayon = 220
  Yrayon = 75       
  Debut = - 48 
  Fin = 160
  
  For u = Abs(fin - debut) To 1 Step - 1        ; Yellow
    
    StartDrawing(CanvasOutput(0))
    
    efface_chart(Axex, Axey, Xrayon, Yrayon, fin, Debut, Taille, RGB(254, 255, 255), RGB(255, 255, 255))
    ; redraws the object modified chart mode-return
    For i = 1 To Taille     ; redessine l'objet chart modifié mode-retro
      Chart(Axex, i + Axey, Xrayon, Yrayon, 0, debut + (Abs(Debut - fin ) - u), Fin, RGB(225, 181, 0), RGB(225, 180, 0))
    Next i
    Chart(Axex, Axey, Xrayon, Yrayon, 0 , debut + (Abs(Debut - fin ) - u), Fin, RGB(225, 226, 0), RGB(225, 225, 0))
    
    StopDrawing()      
    
  Next u
  
  StartDrawing(CanvasOutput(0)) 
  
  efface_chart(Axex, Axey, Xrayon, Yrayon, fin, Debut, Taille, RGB(254, 255, 255),RGB(255, 255, 255))
  
  StopDrawing()
  
  ;**********************************************************************************************************
  
  Delay(300)
  StartDrawing(CanvasOutput(0))
  Box(10, 10, 480, 480, RGB(255, 255, 255))
  DrawText(190, 220, " TERMINE ", RGB(0, 0, 0),RGB(255, 255, 225))
  StopDrawing()
  Delay(1000)
  
  Repeat
    
  Until WaitWindowEvent()  = #PB_Event_CloseWindow
EndIf
Dernière modification par kernadec le lun. 20/oct./2014 20:16, modifié 7 fois.
Avatar de l’utilisateur
kernadec
Messages : 1594
Inscription : ven. 25/avr./2008 11:14

Re: Rotation d'Ellipse

Message par kernadec »

bonsoir
Le code précédent à été mis à jour
j'ai retrouvé mon erreur, j'avais oublié que les épaisseurs étaient différente pour chaque chart en fonction de la perspective
et donc pour le mode rétro les tests ont été réalisés sur un code commun et je n'ai pas prêter suffisamment
attention aux boucles des épaisseurs,
dans le même temps, j'avais aussi oublié pour la procédure "efface_chart()" le paramètre épaisseur
c'est réparé,
je vous prie de m' excuser pour ses oublis :oops:

Cordialement
Avatar de l’utilisateur
kernadec
Messages : 1594
Inscription : ven. 25/avr./2008 11:14

Re: Rotation d'Ellipse

Message par kernadec »

bonjour
code précédent mis à jour
Après quelques tests, j'ai essayé de simplifier mon code :wink:
Car je rencontre des problèmes avec la position du point de référence Fillarea()
cela est dû aux calculs trigonométriques des angles très fermés du début et de fin de chart.
les places sont chères dans cette zone.. :? . il faudra certainement mettre un test
pour savoir si le point de référence est bien dans la zone et si elle est accessible.

Voici une astuce quand on rencontre ce souci avec un modèle de Chart pour garder
les valeur de l'angle de "début" et de "fin" la solution et d’augmenter ou de réduire de 1 pixel
la taille de Xrayon ou de Yrayon ce qui modifie les calculs et règle le problème.

Cordialement
Avatar de l’utilisateur
Kwai chang caine
Messages : 6962
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Rotation d'Ellipse

Message par Kwai chang caine »

Trop de la balle les "Top 50" .....enfin je veut dire charts animés 8O
Excel commence à trembler, mais jusqu'a ou t'arreteras tu t'il ???? :mrgreen:
Merci beaucoup du partage qui peut s'averer vraiment utile dans le monde des giciels bureautiques 8)
Les gens deviennent faineants..ils veulent plus lire les chiffres :?
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
kernadec
Messages : 1594
Inscription : ven. 25/avr./2008 11:14

Re: Rotation d'Ellipse

Message par kernadec »

Bonsoir
Merci, KCC mais pourquoi s'arreter :D
j'ai ajouté les Rotations inverses aux précédents charts

Code Précédent mis à jour!
Car j'ai eu le temps aujourd'hui de régler mon problème de trigo
Maintenant je n'essayerais plus de colorier avec un Fillarea()
dans un secteur de moins d'un degrés, c'est promis! :mrgreen:

PS: je vous poste un essai de code d'ellipses gradients avec le mode "linegradient"

Cordialement

Code : Tout sélectionner

Procedure Ellipse_rotation(Axex.l, Axey.l, Xrayon.l, Yrayon.l, Rot.d, Debut.l, Fin.l, Couleur.l) 
  
  Protected angle.d, R.d, X.d, Y.d, Posx1.l, Posy1.l, Posx2.l, Posy2.l
  
  R = Radian(Rot)
  
  For o = Debut To fin 
    
    Angle = Radian(o)
    
    X =  Cos(Angle) * Xrayon                          
    Y = -Sin(Angle) * Yrayon
    
    Posx1 = Round(X * Cos(R) + Y * Sin(R), #PB_Round_Nearest) + Axex  ;round pour un meilleur tracé
    Posy1 = Round(X * Sin(R) - Y * Cos(R), #PB_Round_Nearest) + Axey
    
    If Posx2 = 0 And Posy2 = 0 : Posx2 = Posx1 : Posy2 = Posy1 : EndIf
    
    LineXY(Posx2, Posy2, Posx1, Posy1, Couleur)
    
    Posx2 = Posx1
    Posy2 = Posy1
    
  Next o  
  
EndProcedure


If OpenWindow(0, 0, 0, 500,500, "Ellipses Gradient en Rotation", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  CanvasGadget(0, 10, 10, 480, 480)
  
  Axex.l = 240
  Axey.l = 240
  Xrayon.l = 60
  Yrayon.l = 230
  Debut.l = 0
  Fin.l = 360
  
  
  For u=0 To 720 Step 10
    
    StartDrawing(CanvasOutput(0))
    
    Box(10, 10, 480, 480,RGB(255, 255, 255))
    
    For i=1 To 160 
      
      DrawingMode(#PB_2DDrawing_Gradient)
      BackColor(RGB(255-i,0,125+i))
      FrontColor( RGB(255-i,95+i,0))
      LinearGradient(350, 100, 170, 100)
      
      Ellipse_rotation(Axex, Axey, Xrayon+i, Yrayon-i,u, Debut, Fin, RGB(0,0,0))
      
    Next i
    
    StopDrawing()
    
  Next u
  
  Repeat
    
  Until WindowEvent() = #PB_Event_CloseWindow
EndIf
Frenchy Pilou
Messages : 2194
Inscription : jeu. 27/janv./2005 19:07

Re: Rotation d'Ellipse & Pie Chart 3D Animés

Message par Frenchy Pilou »

Ce qui est cocasse avec ces tranches de camembert tournoyant, c'est que les interfaces des programmes graphiques les utilisent à fond!
C'est la nouvelle mode!
Les "Pie" Menus :)
https://www.youtube.com/watch?v=6VJnEBbXwF4#t=826
Dernière modification par Frenchy Pilou le mer. 22/oct./2014 1:27, modifié 1 fois.
Est beau ce qui plaît sans concept :)
Speedy Galerie
Avatar de l’utilisateur
kernadec
Messages : 1594
Inscription : ven. 25/avr./2008 11:14

Re: Rotation d'Ellipse & Pie Chart 3D Animés

Message par kernadec »

Bonjour
merci, Frenchy Pilou pour le lien à la mode ellipse :D

En partant de la Procédure Ellipse, j'ai modifié la boucle pour avoir un step décimal
et ajouter un mode constructions Polygonales avec ce code ellipse.
maintenant on peut faire des charts avec des piles 3D
voici un code pour illustrer tout ça!

Cordialement

Code : Tout sélectionner

Procedure Poly_Ellipse_rotation(Axex.l, Axey.l, Xrayon.l, Yrayon.l, Rot.d, Debut.l, Fin.l,polygone.l, Couleur.l) 
  
  Protected angle.d, R.d, X.d, Y.d, Posx1.l, Posy1.l, Posx2.l, Posy2.l
  
  
  If polygone <> 0 :   Cote.d = 360 / polygone : Else : Cote = 10 : EndIf
  
  R = Radian(Rot)
  Pas.d = debut 
  
  Repeat 
    
    Angle = Radian(Pas)
    
    X =  Cos(Angle) * Xrayon                          
    Y = -Sin(Angle) * Yrayon
    
    Posx1 = Round(X * Cos(R) + Y * Sin(R), #PB_Round_Nearest) + Axex  ;round pour un meilleur tracé
    Posy1 = Round(X * Sin(R) - Y * Cos(R), #PB_Round_Nearest) + Axey
    
    If Posx2 = 0 And Posy2 = 0 : Posx2 = Posx1 : Posy2 = Posy1 : EndIf
    
    LineXY(Posx2, Posy2, Posx1, Posy1, Couleur)
    
    Posx2 = Posx1
    Posy2 = Posy1
    
    Pas + Cote
    
  Until Pas > Fin + 1
  
EndProcedure


If OpenWindow(0, 0, 0, 500,500, "Polygones Gradient en Rotation", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  CanvasGadget(0, 10, 10, 480, 480)
  
  Axex.l = 100
  Axey.l = 320
  Xrayon.l = 60
  Yrayon.l = 25
  Debut.l = 0
  Fin.l = 360
  
  
  For u = 0 To 1080 Step 10
    z = z + 1
    StartDrawing(CanvasOutput(0))
    
    Box(10, 10, 480, 480,RGB(255, 255, 255))
    
    Axex = 90
    
    For i = 1 To 30 + z 
      
      DrawingMode(#PB_2DDrawing_Gradient)
      BackColor(RGB(205, 200, 125+i))
      FrontColor( RGB(255-i, 95+i, 0))
      Poly_Ellipse_rotation(Axex, Axey - i, Xrayon, Yrayon,u, Debut, Fin,4, RGB(0,0,0))
      
    Next i
    
    Axex = 240
    
    For i = 1 To 50+
                 
      DrawingMode(#PB_2DDrawing_Gradient)
      BackColor(RGB(200+i, 105+i, 0))
      FrontColor( RGB(250-i, 200+i, 55-i))
      Poly_Ellipse_rotation(Axex, Axey - i, Xrayon, Yrayon,u, Debut, Fin, 0, RGB(0,0,0))
      
    Next i
    
    Axex.l = 390
    
    For i = 1 To 100 + z 
      
      DrawingMode(#PB_2DDrawing_Gradient)
      BackColor(RGB(50, 100, 100-i))
      FrontColor( RGB(10, 255-i, 20+i))
      Poly_Ellipse_rotation(Axex, Axey - i, Xrayon, Yrayon,u, Debut, Fin, 6, RGB(0,0,0))
      
    Next i
    
    StopDrawing()
    
  Next u
  
  Repeat
    
  Until WindowEvent() = #PB_Event_CloseWindow
EndIf
Dernière modification par kernadec le mar. 21/oct./2014 15:35, modifié 3 fois.
Avatar de l’utilisateur
Micoute
Messages : 2522
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Rotation d'Ellipse & Pie Chart 3D Animés

Message par Micoute »

Décidément tu es sur ta lancée ! Continue tu m’intéresses ! Merci pour ce partage.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.73 PB 6.00 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
Kwai chang caine
Messages : 6962
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Rotation d'Ellipse & Pie Chart 3D Animés

Message par Kwai chang caine »

Merci, KCC mais pourquoi s'arreter
Bon diou non !!!
Continue, c'est super beau ce que tu fait 8O
C'est la que je me rend compte que apres l'addition et la soustraction, j'ai du dormir un peu trop en cours de math :oops:
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Répondre