Précédent   Forum du club des développeurs et IT Pro > Autres langages > Python & Zope > Calcul scientifique
Calcul scientifique Forum d'entraide sur la programmation scientifique et bibliothèques associées (PIL, NumPy, SciPy, ...)
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 18/10/2012, 17h46   #1
Luke spywoker
Membre éclairé
 
Avatar de Luke spywoker
 
Homme
Etudiant informatique autodidacte
Inscription : juin 2010
Messages : 591
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Etudiant informatique autodidacte

Informations forums :
Inscription : juin 2010
Messages : 591
Points : 370
Points : 370
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...
Blog: http://3dcyberspace.unblog.fr/
Site: Sanctuaire cybernétique
Luke spywoker est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/10/2012, 23h01   #2
josmiley
Membre chevronné
 
Homme
Inscription : avril 2004
Messages : 675
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : avril 2004
Messages : 675
Points : 728
Points : 728
y a un code bien sympa ici: http://www.pasteall.org/15524/python

tu peux peut-être t'en inspirer.
josmiley est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/10/2012, 23h02   #3
Matthieu Brucher
Rédacteur/Modérateur
 
Avatar de Matthieu Brucher
 
Matthieu Brucher
Développeur HPC
Inscription : juillet 2005
Messages : 9 697
Détails du profil
Informations personnelles :
Nom : Matthieu Brucher
Âge : 31
Localisation : France, Pyrénées Atlantiques (Aquitaine)

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

Informations forums :
Inscription : juillet 2005
Messages : 9 697
Points : 18 133
Points : 18 133
En fait, tu dois transformer ton 0 et ton 1 en respectivement -1 et 1, c'est ça ?
Matthieu Brucher est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/10/2012, 14h25   #4
Luke spywoker
Membre éclairé
 
Avatar de Luke spywoker
 
Homme
Etudiant informatique autodidacte
Inscription : juin 2010
Messages : 591
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Etudiant informatique autodidacte

Informations forums :
Inscription : juin 2010
Messages : 591
Points : 370
Points : 370
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...
Blog: http://3dcyberspace.unblog.fr/
Site: Sanctuaire cybernétique
Luke spywoker est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/11/2012, 11h04   #5
Luke spywoker
Membre éclairé
 
Avatar de Luke spywoker
 
Homme
Etudiant informatique autodidacte
Inscription : juin 2010
Messages : 591
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Etudiant informatique autodidacte

Informations forums :
Inscription : juin 2010
Messages : 591
Points : 370
Points : 370
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...
Blog: http://3dcyberspace.unblog.fr/
Site: Sanctuaire cybernétique
Luke spywoker est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/11/2012, 11h11   #6
fred1599
Membre Expert
 
Avatar de fred1599
 
Homme Fred
Enseignant
Inscription : juillet 2006
Messages : 1 322
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 322
Points : 1 820
Points : 1 820
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)
fred1599 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/11/2012, 11h55   #7
josmiley
Membre chevronné
 
Homme
Inscription : avril 2004
Messages : 675
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : avril 2004
Messages : 675
Points : 728
Points : 728
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)]
josmiley est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/11/2012, 16h19   #8
wiztricks
Expert Confirmé Sénior
 
Inscription : juin 2008
Messages : 3 709
Détails du profil
Informations forums :
Inscription : juin 2008
Messages : 3 709
Points : 4 546
Points : 4 546
écrire:
Code :
angle_list_positiv = range(6, 361, 6)
ne suffirait-il pas?
- W
__________________
Architectures Post-Modernes
wiztricks est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/11/2012, 16h32   #9
Luke spywoker
Membre éclairé
 
Avatar de Luke spywoker
 
Homme
Etudiant informatique autodidacte
Inscription : juin 2010
Messages : 591
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Etudiant informatique autodidacte

Informations forums :
Inscription : juin 2010
Messages : 591
Points : 370
Points : 370
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...
Blog: http://3dcyberspace.unblog.fr/
Site: Sanctuaire cybernétique
Luke spywoker est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/11/2012, 22h19   #10
josmiley
Membre chevronné
 
Homme
Inscription : avril 2004
Messages : 675
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : avril 2004
Messages : 675
Points : 728
Points : 728
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
josmiley est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/11/2012, 23h01   #11
Luke spywoker
Membre éclairé
 
Avatar de Luke spywoker
 
Homme
Etudiant informatique autodidacte
Inscription : juin 2010
Messages : 591
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Etudiant informatique autodidacte

Informations forums :
Inscription : juin 2010
Messages : 591
Points : 370
Points : 370
Citation:
ç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...
Blog: http://3dcyberspace.unblog.fr/
Site: Sanctuaire cybernétique
Luke spywoker est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 15h23.


 
 
 
 
Partenaires

Hébergement Web