Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2027 connectés 

  FORUM HardWare.fr
  Programmation
  Python

  Comment faire tourner une spirale avec python ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Comment faire tourner une spirale avec python ?

n°2232919
ptit_stagi​aire
Posté le 07-07-2014 à 21:09:02  profilanswer
 

Bonjour,
 
je travaille sur un projet de psychologie sur l'attention visuelle, et pour cela j'aurais besoin de faire s'afficher une spirale sur un des côtes de mon ecran.
Je n'ai jamais code auparavant, avec ce que j'ai trouve sur internet j'ai bricole le code ci-dessous. Il est tres lourd, je pense aue je pourrais remplacer les affichages successifs par des boucles au lieu de les ecrire mais je ne sais pas comment m'y prendre.
Le plus gros probleme, c'est que je voudrais que ma spirale tourne autour de son axe, alors que la, elle se decale a chaque rotation, et je ne comprends pas pourquoi.
 
Pourriez-vous m'aider s'il vous plaît ?
 
Merci par avance de votre aide et de votre indulgence...
 
 
    import pygame
    from pygame.locals import *
 
    # Definition des dimensions de la fenetre :
    W, H = 1280, 700
 
 
    # Definition de la couleur du fond, proche de celle du fond des photo pour limiter le contraste :
    bg_col = [130, 120, 100]
    window = pygame.display.set_mode([W,H])
 
 
    # Definition de plusieurs images de spirales, tournees de 5° :
 
    spirale0 = pygame.image.load('spirale.jpeg')
    spirale1 = pygame.transform.rotozoom(spirale0, 5, float(0.3))
    spirale2 = pygame.transform.rotozoom(spirale1, 5, float(1))
    spirale3 = pygame.transform.rotozoom(spirale2, 5, float(1))
    spirale4 = pygame.transform.rotozoom(spirale3, 5, float(1))
    spirale5 = pygame.transform.rotozoom(spirale4, 5, float(1))
    spirale6 = pygame.transform.rotozoom(spirale5, 5, float(1))
    spirale7 = pygame.transform.rotozoom(spirale6, 5, float(1))
    spirale8 = pygame.transform.rotozoom(spirale7, 5, float(1))
    spirale9 = pygame.transform.rotozoom(spirale8, 5, float(1))
    spirale10 = pygame.transform.rotozoom(spirale9, 5, float(1))
    spirale11 = pygame.transform.rotozoom(spirale10, 5, float(1))
    spirale12 = pygame.transform.rotozoom(spirale11, 5, float(1))
 
 
 # Affichage
 
    window.fill(bg_col)
    window.blit(spirale1, [200, 454])
    pygame.display.flip()
    pygame.time.wait(30)
 
    window.fill(bg_col)
    window.blit(spirale2, [200, 454])
    pygame.display.flip()
    pygame.time.wait(30)
 
    window.fill(bg_col)
    window.blit(spirale3, [200, 454])
    pygame.display.flip()
    pygame.time.wait(30)
 
    window.fill(bg_col)    
    window.blit(spirale4, [200, 454])
    pygame.display.flip()
    pygame.time.wait(30)
 
    window.fill(bg_col)
    window.blit(spirale5, [200, 454])
    pygame.display.flip()
    pygame.time.wait(30)
 
    window.fill(bg_col)
    window.blit(spirale6, [200, 454])
    pygame.display.flip()
    pygame.time.wait(300)
 
    window.fill(bg_col)
    window.blit(spirale7, [200, 454])
   pygame.display.flip()
   pygame.time.wait(30)
 
    window.fill(bg_col)    
    window.blit(spirale8, [200, 454])
    pygame.display.flip()
    pygame.time.wait(30)
 
    window.fill(bg_col)    
    window.blit(spirale9, [200, 454])
    pygame.display.flip()
    pygame.time.wait(30)
 
    window.fill(bg_col)
    window.blit(spirale10, [200, 454])
    pygame.display.flip()
    pygame.time.wait(30)
 
    window.fill(bg_col)
    window.blit(spirale11, [200, 454])
    pygame.display.flip()
   pygame.time.wait(30)
 
    window.fill(bg_col)    
    window.blit(spirale12, [200, 454])
    pygame.display.flip()
    pygame.time.wait(30)
 
PS : j'utilise une image de spirale au lieu de la dessiner dans python car le but est de travailler sur l'attraction du regard en fonction des differents types de spirales.

mood
Publicité
Posté le 07-07-2014 à 21:09:02  profilanswer
 

n°2232925
honrisse
Posté le 07-07-2014 à 23:59:52  profilanswer
 

ptit_stagiaire a écrit :

Bonjour,
 
je travaille sur un projet de psychologie sur l'attention visuelle, et pour cela j'aurais besoin de faire s'afficher une spirale sur un des côtes de mon ecran.
Je n'ai jamais code auparavant, avec ce que j'ai trouve sur internet j'ai bricole le code ci-dessous. Il est tres lourd, je pense aue je pourrais remplacer les affichages successifs par des boucles au lieu de les ecrire mais je ne sais pas comment m'y prendre.
Le plus gros probleme, c'est que je voudrais que ma spirale tourne autour de son axe, alors que la, elle se decale a chaque rotation, et je ne comprends pas pourquoi.
 
Pourriez-vous m'aider s'il vous plaît ?
 
Merci par avance de votre aide et de votre indulgence...
 
 
    import pygame
    from pygame.locals import *
 
    # Definition des dimensions de la fenetre :
    W, H = 1280, 700
 
 
    # Definition de la couleur du fond, proche de celle du fond des photo pour limiter le contraste :
    bg_col = [130, 120, 100]
    window = pygame.display.set_mode([W,H])
 
 
    # Definition de plusieurs images de spirales, tournees de 5° :
 
    spirale0 = pygame.image.load('spirale.jpeg')
    spirale1 = pygame.transform.rotozoom(spirale0, 5, float(0.3))
    spirale2 = pygame.transform.rotozoom(spirale1, 5, float(1))
    spirale3 = pygame.transform.rotozoom(spirale2, 5, float(1))
    spirale4 = pygame.transform.rotozoom(spirale3, 5, float(1))
    spirale5 = pygame.transform.rotozoom(spirale4, 5, float(1))
    spirale6 = pygame.transform.rotozoom(spirale5, 5, float(1))
    spirale7 = pygame.transform.rotozoom(spirale6, 5, float(1))
    spirale8 = pygame.transform.rotozoom(spirale7, 5, float(1))
    spirale9 = pygame.transform.rotozoom(spirale8, 5, float(1))
    spirale10 = pygame.transform.rotozoom(spirale9, 5, float(1))
    spirale11 = pygame.transform.rotozoom(spirale10, 5, float(1))
    spirale12 = pygame.transform.rotozoom(spirale11, 5, float(1))
 
 
 # Affichage
 
    window.fill(bg_col)
    window.blit(spirale1, [200, 454])
    pygame.display.flip()
    pygame.time.wait(30)
 
    window.fill(bg_col)
    window.blit(spirale2, [200, 454])
    pygame.display.flip()
    pygame.time.wait(30)
 
    window.fill(bg_col)
    window.blit(spirale3, [200, 454])
    pygame.display.flip()
    pygame.time.wait(30)
 
    window.fill(bg_col)    
    window.blit(spirale4, [200, 454])
    pygame.display.flip()
    pygame.time.wait(30)
 
    window.fill(bg_col)
    window.blit(spirale5, [200, 454])
    pygame.display.flip()
    pygame.time.wait(30)
 
    window.fill(bg_col)
    window.blit(spirale6, [200, 454])
    pygame.display.flip()
    pygame.time.wait(300)
 
    window.fill(bg_col)
    window.blit(spirale7, [200, 454])
   pygame.display.flip()
   pygame.time.wait(30)
 
    window.fill(bg_col)    
    window.blit(spirale8, [200, 454])
    pygame.display.flip()
    pygame.time.wait(30)
 
    window.fill(bg_col)    
    window.blit(spirale9, [200, 454])
    pygame.display.flip()
    pygame.time.wait(30)
 
    window.fill(bg_col)
    window.blit(spirale10, [200, 454])
    pygame.display.flip()
    pygame.time.wait(30)
 
    window.fill(bg_col)
    window.blit(spirale11, [200, 454])
    pygame.display.flip()
   pygame.time.wait(30)
 
    window.fill(bg_col)    
    window.blit(spirale12, [200, 454])
    pygame.display.flip()
    pygame.time.wait(30)
 
PS : j'utilise une image de spirale au lieu de la dessiner dans python car le but est de travailler sur l'attraction du regard en fonction des differents types de spirales.


 
 
Une façon pourrait être d'afficher un gif avec tkinter :

  • utiliser une image animée (gif) d'une spirale (http://i702.photobucket.com/albums [...] spiral.gif) ou créer soit même une série d'images successives
  • extraire les images du gif avec par exemple ce site : http://gif-explode.com/ et les sauvegarder sur le pc, ici sous les noms de 1.gif, 2.gif, etc. avec l'extension .gif pour résoudre une erreur (cf dernier point)
  • utiliser le code suivant (testé avec Python 2.7.6.1) et mettre dans imagelist le chemin vers les images extraites du gif :


Code :
  1. # http://www.daniweb.com/software-de [...] th-tkinter
  2. # mimic an animated GIF displaying a series of GIFs
  3. # an animated GIF was used to create the series of GIFs
  4. # with a common GIF animator utility
  5. import time
  6. from Tkinter import *
  7. root = Tk()
  8. imagelist = ["1.gif","2.gif","3.gif",
  9. "4.gif","5.gif","6.gif"]
  10. # extract width and height info
  11. photo = PhotoImage(file=imagelist[0])
  12. width = photo.width()
  13. height = photo.height()
  14. canvas = Canvas(width=width, height=height)
  15. canvas.pack()
  16. # create a list of image objects
  17. giflist = []
  18. for imagefile in imagelist:
  19.     photo = PhotoImage(file=imagefile)
  20.     giflist.append(photo)
  21. # loop through the gif image objects forever
  22. while True:
  23.     for gif in giflist:
  24.         canvas.delete(ALL)
  25.         canvas.create_image(width/2.0, height/2.0, image=gif)
  26.         canvas.update()
  27.         time.sleep(0.1)
  28. root.mainloop()


 


Python est un langage facile à appréhender, cela peut valoir le coût de lire un tutoriel sur ce langage.


Message édité par honrisse le 08-07-2014 à 00:07:16
n°2233080
ptit_stagi​aire
Posté le 09-07-2014 à 15:29:47  profilanswer
 

Merci beaucoup !
 
J'ai trouvé plus simple mais qui ne marcherait jamais pour des formes non symétriques, donc je garde précieusement votre réponse pour plus tard.
 
Si d'autres en ont besoin, voici ce que j'ai fait (et j'ai progressé, j'ai appris à faire une boucle depuis... oui je partais de loin...) :
 
    def spiral():
        spi_0 = pygame.image.load('spirale.png')
        for i in range(200) :
        spi_i = pygame.transform.rotozoom(spi_0, i*(-3), float(0.4))
        ws, hs = spi_i.get_size()
        window.fill(bg_col)
        window.blit(spi_i, [200 - ws/2, 450 -hs/2])
        pygame.display.flip()
        pygame.time.wait(10)
 
Le problème, c'était que ma spirale était définie par un carré, donc elle tournait au sein de ce carré, mais une fois pivoté, un carré n'occupe plus la même hauteur ni la même largeur, du coup ma spirale était déformée un peu à chaque tour. La solution, c'était de définir  "ws, hs = spi_i.get_size()" pour inclure hs et ws dans les dimensions d'affichage (window.blit(spi_i, [200 - ws/2, 450 -hs/2]) au lieu de window.blit(spirale2, [200, 450])).


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Python

  Comment faire tourner une spirale avec python ?

 

Sujets relatifs
[Python] Tri tableau[Python 3] Lister fichiers présents sur un serveur HTTP
[Python 3.X] Utilisation de urllibPython AttributeError
[PYTHON] Plantage suspect![python] Afficher primitive/figure au premier plan (Windows)
aide pour base de données python 2.7[python] nom de champ d'un dictionnaire en variable
Aide projet ISN [python]Python sur page web php
Plus de sujets relatifs à : Comment faire tourner une spirale avec python ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR