+ Répondre à la discussion
Affichage des résultats 1 à 11 sur 11
  1. #1
    Membre éprouvé Avatar de Luke spywoker
    Homme Profil pro
    Etudiant informatique autodidacte
    Inscrit en
    juin 2010
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant informatique autodidacte

    Informations forums :
    Inscription : juin 2010
    Messages : 725
    Points : 461
    Points
    461

    Par défaut Spirale tournante et math

    Salut les pythons scientifiques,
    Je suis arriver a dessiner une spirale grâce a une formule qu'on trouve dans tous les bouquins de programmation de jeux ou scientifique qui permet de donner une longueur de rayon, et un nombre de points symbolisant le nombre de coin d'un polygone et qui renvoie les coordonnées.
    Et j'ai adapter cette méthode afin de dessiner une spirale que j'arrive a faire tourner comme vous le verrai si vous exécuter le code qui suit.
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
     
    # -*- coding: utf-8 -*-
     
    import pygame
    from pygame.locals import *
    from sys import exit
    import math
    from time import sleep
     
    pygame.init()
    screen=pygame.display.set_mode((800,600))
     
    def get_angle(pos,scale,start_pos) :
      offset=start_pos #décalage
      degrees=360/scale * pos + offset
      return degrees
     
    def return_coords(pos,scale,length,x,y,start_pos) :
      degrees=get_angle(pos,scale,start_pos)
      rad_value=degrees/180.0*math.pi #conversion en radians
      x_pos=round(math.cos(rad_value)*length+x)
      y_pos=round(math.sin(rad_value)*length+y)
      return (x_pos,y_pos)
     
     
    angle_list_positiv=[6, 12, 18, 24, 30, 36, 42, 48, 54, 60, 66, 72, 78, 84, 90, 96, 102, 108, 114, 120, 126, 132, 138, 144, 150, 156, 162, 168, 174, 180, 186, 192, 198, 204, 210, 216, 222, 228, 234, 240, 246, 252, 258, 264, 270, 276, 282, 288, 294, 300, 306, 312, 318, 324, 330, 336, 342, 348, 354, 360]
    angle_list_negativ=[-6, -12, -18, -24, -30, -36, -42, -48, -54, -60, -66, -72, -78, -84, -90, -96, -102, -108, -114, -120, -126, -132, -138, -144, -150, -156, -162, -168, -174, -180, -186, -192, -198, -204, -210, -216, -222, -228, -234, -240, -246, -252, -258, -264, -270, -276, -282, -288, -294, -300, -306, -312, -318, -324, -330, -336, -342, -348, -354, -360]
    angle_list_negativ.reverse()
     
     
    control=0 
    ii=0 
    while True :
     
     
      if control == 0 :
        from_center=1
        spiral_coords=[]
     
     
        i=0
        while i < 60 :
          spiral_coords.append(return_coords(i,60,from_center,400,300,angle_list_positiv[i]))
          i += 1
     
          from_center +=1
        i=0  
        while i < 60 :
          spiral_coords.append(return_coords(i,60,from_center,400,300,angle_list_positiv[i]))
          i += 1
          from_center +=1 
     
        i=0  
        while i < 60 :
          spiral_coords.append(return_coords(i,60,from_center,400,300,angle_list_positiv[i]))
          i += 1
          from_center +=1  
     
        to_change=angle_list_positiv.pop(0)
        angle_list_positiv.append(to_change)
        ii += 1
        if ii == 60 :
          ii=0
          control=1
     
      elif control == 1 :
        from_center=1
        spiral_coords=[]
     
     
        i=59
        while i >= 0 :
          spiral_coords.append(return_coords(i,60,from_center,400,300,angle_list_negativ[i]))
     
          i -= 1
          from_center +=1
     
        i=59  
        while i >= 0 :
          spiral_coords.append(return_coords(i,60,from_center,400,300,angle_list_negativ[i]))
     
          i -= 1
          from_center +=1 
     
        i=59  
        while i >= 0 :
          spiral_coords.append(return_coords(i,60,from_center,400,300,angle_list_negativ[i]))
     
          i -= 1
          from_center +=1  
     
     
        to_change=angle_list_negativ.pop(0)
     
        angle_list_negativ.append(to_change)
        ii += 1
        if ii == 60 :
          ii=0
          control=0
     
      screen.fill((0))
      pygame.draw.lines(screen,(255,255,255),False,spiral_coords,2)
      sleep(0.1)
     
     
     
      for event in pygame.event.get() :
        if event.type == QUIT :
          exit()
     
      pygame.display.update()
    Et j'aimerai quand la valeur de la variable control est a 1 de faire tourner la spirale dans le sens contraire des aiguille d'une montre et donc inversement au tour avec valeur de control=0... Seulement je n'y arrive pas c'est pourquoi je m'adresse a vous qui pouvait m'aider si vous avez de l'adresse en math, j'ai mis plusieurs variable en place dans ce but (angle_list_negativ, itération inverse...) et j'ai essayer de jouer avec ces paramètres afin de faire tourner la spirale dans l'autre sens sans succès.
    Je ne suis pas fort en math et je vous serai reconnaissant de bien vouloir m'aider si vous le pouvez ( il faut prendre un peu de temps ).
    Merci pour vos réponses éclairées.
    Pour faire tes armes:
    Use du présent pour construire ton futur sinon use de ce que tu as appris auparavant.
    Et sois toujours bien armé avant de te lancer.
    Le hasard ne sourit qu'aux gens préparés...
    Site: Sanctuaire cybernétique
    Site: 3dreaming-imaging.net
    FUN is HARD WORK !!!

  2. #2
    Membre émérite
    Homme Profil pro
    Inscrit en
    avril 2004
    Messages
    770
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : avril 2004
    Messages : 770
    Points : 911
    Points
    911

    Par défaut

    y a un code bien sympa ici: http://www.pasteall.org/15524/python

    tu peux peut-être t'en inspirer.

  3. #3
    Rédacteur/Modérateur

    Avatar de Matthieu Brucher
    Profil pro Matthieu Brucher
    Développeur HPC
    Inscrit en
    juillet 2005
    Messages
    9 794
    Détails du profil
    Informations personnelles :
    Nom : Matthieu Brucher
    Âge : 33
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : juillet 2005
    Messages : 9 794
    Points : 21 621
    Points
    21 621

    Par défaut

    En fait, tu dois transformer ton 0 et ton 1 en respectivement -1 et 1, c'est ça ?

  4. #4
    Membre éprouvé Avatar de Luke spywoker
    Homme Profil pro
    Etudiant informatique autodidacte
    Inscrit en
    juin 2010
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant informatique autodidacte

    Informations forums :
    Inscription : juin 2010
    Messages : 725
    Points : 461
    Points
    461

    Par défaut

    Merci pour vos réponses et pour le liens.
    J'ai modifier mon code mais je n'obtiens pas le résultat souhaiter: j'arrive a faire tourner la spirale dans l'autre sens mais celle-ci est dans l'orientation inverse de la spirale de départ ce qui n'est pas le but j'aimerai garder la même orientation mais faire tourner la spirale l'envers sans changer l'orientation de celle-ci.
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
     
    # -*- coding: utf-8 -*-
     
    import pygame
    from pygame.locals import *
    from sys import exit
    import math
    import datetime
    from pygame import gfxdraw
    from time import sleep
    from random import choice
     
    pygame.init()
    screen=pygame.display.set_mode((800,600))
     
    def get_angle(pos,scale,start_pos) :
      offset=start_pos #décalage
      degrees=360/scale * pos + offset
      return degrees
     
    def return_coords(pos,scale,length,x,y,start_pos) :
      degrees=get_angle(pos,scale,start_pos)
      rad_value=degrees/180.0*math.pi #conversion en radians
      x_pos=round(math.cos(rad_value)*length+x)
      y_pos=round(math.sin(rad_value)*length+y)
      return (x_pos,y_pos)
     
     
    def get_angle_inverse(pos,scale,start_pos) :
      offset=start_pos #décalage
      degrees=360/scale * pos + offset
      return -degrees
     
    def return_coords_inverses(pos,scale,length,x,y,start_pos) :
      degrees=get_angle_inverse(pos,scale,start_pos)
      rad_value=degrees/180.0*math.pi #conversion en radians
      x_pos=round(math.cos(rad_value)*length+x)
      y_pos=round(math.sin(rad_value)*length+y)
      return (x_pos,y_pos)  
     
    angle_list_positiv=[6, 12, 18, 24, 30, 36, 42, 48, 54, 60, 66, 72, 78, 84, 90, 96, 102, 108, 114, 120, 126, 132, 138, 144, 150, 156, 162, 168, 174, 180, 186, 192, 198, 204, 210, 216, 222, 228, 234, 240, 246, 252, 258, 264, 270, 276, 282, 288, 294, 300, 306, 312, 318, 324, 330, 336, 342, 348, 354, 360]
    angle_list_negativ=[-6, -12, -18, -24, -30, -36, -42, -48, -54, -60, -66, -72, -78, -84, -90, -96, -102, -108, -114, -120, -126, -132, -138, -144, -150, -156, -162, -168, -174, -180, -186, -192, -198, -204, -210, -216, -222, -228, -234, -240, -246, -252, -258, -264, -270, -276, -282, -288, -294, -300, -306, -312, -318, -324, -330, -336, -342, -348, -354, -360]
    angle_list_negativ.reverse()
     
     
    control=0 
    ii=0 
    while True :
     
     
      if control == 0 :
        from_center=1
        spiral_coords=[]
     
     
        i=0
        while i < 60 :
          spiral_coords.append(return_coords(i,60,from_center,400,300,angle_list_positiv[i]))
          i += 1
     
          from_center +=1
        i=0  
        while i < 60 :
          spiral_coords.append(return_coords(i,60,from_center,400,300,angle_list_positiv[i]))
          i += 1
          from_center +=1 
     
        i=0  
        while i < 60 :
          spiral_coords.append(return_coords(i,60,from_center,400,300,angle_list_positiv[i]))
          i += 1
          from_center +=1  
     
        to_change=angle_list_positiv.pop(0)
        angle_list_positiv.append(to_change)
        ii += 1
        if ii == 60 :
          ii=0
          control=1
     
      elif control == 1 :
        from_center=1
        spiral_coords=[]
     
     
        i=0
        while i < 60 :
          spiral_coords.append(return_coords_inverses(i,60,from_center,400,300,angle_list_positiv[i]))
          i += 1
     
          from_center +=1
        i=0  
        while i < 60 :
          spiral_coords.append(return_coords_inverses(i,60,from_center,400,300,angle_list_positiv[i]))
          i += 1
          from_center +=1 
     
        i=0  
        while i < 60 :
          spiral_coords.append(return_coords_inverses(i,60,from_center,400,300,angle_list_positiv[i]))
          i += 1
          from_center +=1  
     
        to_change=angle_list_positiv.pop(0)
        angle_list_positiv.append(to_change)
        ii += 1
        if ii == 60 :
          ii=0
          control=0
     
      screen.fill((0))
      pygame.draw.lines(screen,(255,255,255),False,spiral_coords,2)
      sleep(0.1)
     
     
     
      for event in pygame.event.get() :
        if event.type == QUIT :
          exit()
     
      pygame.display.update()
    Merci pour vos réponses.
    Pour faire tes armes:
    Use du présent pour construire ton futur sinon use de ce que tu as appris auparavant.
    Et sois toujours bien armé avant de te lancer.
    Le hasard ne sourit qu'aux gens préparés...
    Site: Sanctuaire cybernétique
    Site: 3dreaming-imaging.net
    FUN is HARD WORK !!!

  5. #5
    Membre éprouvé Avatar de Luke spywoker
    Homme Profil pro
    Etudiant informatique autodidacte
    Inscrit en
    juin 2010
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant informatique autodidacte

    Informations forums :
    Inscription : juin 2010
    Messages : 725
    Points : 461
    Points
    461

    Par défaut Réponse trouver

    Merci pour vos réponses,
    je poste simplement car j'ai trouver réponse a ce que je voulais faire tous seul et la solution se trouve dans le changement de position dans la liste d'angles, bref je vous laisse admirez le résultat:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
     
     
    # -*- coding: utf-8 -*-
     
    import pygame
    from pygame.locals import *
    from sys import exit
    import math
    import datetime
    from pygame import gfxdraw
    from time import sleep
    from random import choice
     
    pygame.init()
    screen=pygame.display.set_mode((800,600))
     
    def get_angle(pos,scale,start_pos) :
      offset=start_pos #décalage
      degrees=360/scale * pos + offset
      return degrees
     
    def return_coords(pos,scale,length,x,y,start_pos) :
      degrees=get_angle(pos,scale,start_pos)
      rad_value=degrees/180.0*math.pi #conversion en radians
      x_pos=round(math.cos(rad_value)*length+x)
      y_pos=round(math.sin(rad_value)*length+y)
      return (x_pos,y_pos)
     
    angle_list_positiv=[6, 12, 18, 24, 30, 36, 42, 48, 54, 60, 66, 72, 78, 84, 90, 96, 102, 108, 114, 120, 126, 132, 138, 144, 150, 156, 162, 168, 174, 180, 186, 192, 198, 204, 210, 216, 222, 228, 234, 240, 246, 252, 258, 264, 270, 276, 282, 288, 294, 300, 306, 312, 318, 324, 330, 336, 342, 348, 354, 360]
     
    control=0 
    ii=0 
    sens=0
    while True :
     
     
     
      from_center=1
      spiral_coords=[]
     
     
      i=0
      while i < 60 :
        spiral_coords.append(return_coords(i,60,from_center,400,300,angle_list_positiv[i]))
        i += 1
     
        from_center +=1
      i=0  
      while i < 60 :
        spiral_coords.append(return_coords(i,60,from_center,400,300,angle_list_positiv[i]))
        i += 1
        from_center +=1 
     
      i=0  
      while i < 60 :
        spiral_coords.append(return_coords(i,60,from_center,400,300,angle_list_positiv[i]))
        i += 1
        from_center +=1  
     
      if control == 0 :
        to_change=angle_list_positiv.pop(0)
        angle_list_positiv.append(to_change)
      elif control == 1 :
        to_change=angle_list_positiv.pop(-1)
        angle_list_positiv.insert(0,to_change)
     
      ii += 1
      if ii == 60 and control == 0 :
        ii=0
        control=1
      elif ii == 60 and control == 1 :
        ii=0
        control=0
     
     
      screen.fill((0))
      pygame.draw.lines(screen,(255,255,255),False,spiral_coords,2)
      sleep(0.1)
     
     
     
      for event in pygame.event.get() :
        if event.type == QUIT :
          exit()
     
      pygame.display.update()
    Merci pour vos réponses et le liens m'a beaucoup inspirer.
    Sur ce bon python a vous.
    Pour faire tes armes:
    Use du présent pour construire ton futur sinon use de ce que tu as appris auparavant.
    Et sois toujours bien armé avant de te lancer.
    Le hasard ne sourit qu'aux gens préparés...
    Site: Sanctuaire cybernétique
    Site: 3dreaming-imaging.net
    FUN is HARD WORK !!!

  6. #6
    Expert Confirmé
    Avatar de fred1599
    Homme Profil pro Fred
    Enseignant
    Inscrit en
    juillet 2006
    Messages
    1 834
    Détails du profil
    Informations personnelles :
    Nom : Homme Fred
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : juillet 2006
    Messages : 1 834
    Points : 2 848
    Points
    2 848

    Par défaut

    Code :
    angle_list_positiv=[i for i in range(6, 360, 6)]
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  7. #7
    Membre émérite
    Homme Profil pro
    Inscrit en
    avril 2004
    Messages
    770
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : avril 2004
    Messages : 770
    Points : 911
    Points
    911

    Par défaut

    Citation Envoyé par fred1599 Voir le message
    Code :
    angle_list_positiv=[i for i in range(6, 360, 6)]
    Code :
    angle_list_positiv=[i for i in range(6, 361, 6)]

  8. #8
    Modérateur

    Homme Profil pro
    Architecte technique
    Inscrit en
    juin 2008
    Messages
    5 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2008
    Messages : 5 563
    Points : 8 403
    Points
    8 403

    Par défaut

    écrire:
    Code :
    angle_list_positiv = range(6, 361, 6)
    ne suffirait-il pas?
    - W
    Architectures Post-Modernes

  9. #9
    Membre éprouvé Avatar de Luke spywoker
    Homme Profil pro
    Etudiant informatique autodidacte
    Inscrit en
    juin 2010
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant informatique autodidacte

    Informations forums :
    Inscription : juin 2010
    Messages : 725
    Points : 461
    Points
    461

    Par défaut

    Désolé d'avoir sali le forum de code impropre je m'excuse mais j'ai écrit ce code sur le grill pour poser la question et je n'ai pas fait assez le ménage dans mon code quand j'ai écrit la résolution du problème.
    Pour faire tes armes:
    Use du présent pour construire ton futur sinon use de ce que tu as appris auparavant.
    Et sois toujours bien armé avant de te lancer.
    Le hasard ne sourit qu'aux gens préparés...
    Site: Sanctuaire cybernétique
    Site: 3dreaming-imaging.net
    FUN is HARD WORK !!!

  10. #10
    Membre émérite
    Homme Profil pro
    Inscrit en
    avril 2004
    Messages
    770
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : avril 2004
    Messages : 770
    Points : 911
    Points
    911

    Par défaut

    Citation Envoyé par wiztricks Voir le message
    écrire:
    Code :
    angle_list_positiv = range(6, 361, 6)
    ne suffirait-il pas?
    - W
    ça m'apprendra à la ramener

  11. #11
    Membre éprouvé Avatar de Luke spywoker
    Homme Profil pro
    Etudiant informatique autodidacte
    Inscrit en
    juin 2010
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant informatique autodidacte

    Informations forums :
    Inscription : juin 2010
    Messages : 725
    Points : 461
    Points
    461

    Par défaut

    ça m'apprendra à la ramener
    Code :
    angle_list_positiv = range(0, 360, 6)
    Marche aussi car la fonction de calcul d'angle traite 360 comme 0.

    Et d'ailleurs ton lien josmiley m'a bien inspirer, j'ai créer une animation avec :
    déroulage (ligne +=),
    rotation,
    rotation inverse,
    et enroulage (ligne -=)
    de la spirale.
    Comme quoi la ramener avec un simple lien peut aider a inspirer car je n'ai pas copier l'auteur du lien j'ai seulement eu de l'inspiration quand j'ai vue la spirale a six branches...
    Pour faire tes armes:
    Use du présent pour construire ton futur sinon use de ce que tu as appris auparavant.
    Et sois toujours bien armé avant de te lancer.
    Le hasard ne sourit qu'aux gens préparés...
    Site: Sanctuaire cybernétique
    Site: 3dreaming-imaging.net
    FUN is HARD WORK !!!

+ Répondre à la discussion
Cette discussion est résolue.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •