Problème sur les listes

Voir le sujet précédent Voir le sujet suivant Aller en bas

Problème sur les listes

Message  Joffrey le Mar 23 Déc - 12:06

Bonjour,

Je souhaite faire un travail sur les listes, et j'ai en fait un double indice qui me pose un problème.
Voici :
Je construit ma liste de départ, mettons
Code:
L:=[1,i,-1]
je souhaite "transformer cette liste" en
Code:
L:=Liste(for k from 1 to 2 do 4*L[k]-2*L[k+1] od,1)
pour construire
Code:
Ligne(for z from 1 to 3 do L[k] od,1)
Jusque la pas de souci.

Mon problème est que je voudrais appliquer a cette nouvelle liste la même transformation pour construire un nouveau triangle.

Je peux évidemment le faire à la main s'il y a moins de 10 itérations mais si je veux en faire 50 ça devient vite fastidieux.

Comment je peux régler ce problème de double indice?

Bonne journée

Joffrey

Nombre de messages : 179
Age : 35
Localisation : Vichy(03) / Clermont-Ferrand(63)
Date d'inscription : 13/06/2008

Voir le profil de l'utilisateur http://mathex.servhome.org

Revenir en haut Aller en bas

Re: Problème sur les listes

Message  P.Fradin le Mar 23 Déc - 14:34

Joffrey a écrit:Bonjour,

Bonjour Joffrey,


Je souhaite faire un travail sur les listes, et j'ai en fait un double indice qui me pose un problème.
Voici :
Je construit ma liste de départ, mettons
Code:
L:=[1,i,-1]
je souhaite "transformer cette liste" en
Code:
L:=Liste(for k from 1 to 2 do 4*L[k]-2*L[k+1] od,1)

Pour une petite liste ça va, mais il faut savoir que les accés aux éléments d'une liste comme L[k] et L[k+1] correspondent à un parcours de liste, pour une liste à n éléments tu fais donc en gros n^2 parcours (partiels) de la liste! Je te propose plutôt ça (un seul parcours):

Code:

old:=Nil,
L:= [for z in L do 4*old-2*z , old:=z od, L[1] ]


pour construire
Code:
Ligne(for z from 1 to 3 do L[k] od,1)

Inutile de reparcourir la liste! La commande Ligne prend un liste en paramètre:

Code:
Ligne( L ,1)


Mon problème est que je voudrais appliquer a cette nouvelle liste la même transformation pour construire un nouveau triangle.
Je peux évidemment le faire à la main s'il y a moins de 10 itérations mais si je veux en faire 50 ça devient vite fastidieux.
Comment je peux régler ce problème de double indice?

A l'aide d'une boucle:

Code:

L:=[1,i,-1], Ligne(L, 1),
for k from 1 to 50 do
  L:= [ old:=Nil, for z in L do 4*old-2*z , old:=z od, L[1] ],
 Ligne( L, 1)
od

ou encore mieux (une seule instruction Ligne)

Code:

L:=[1,i,-1],
Ligne([L, for k from 1 to 50 do
              old:=Nil,
              L:= [ for z in L do 4*old-2*z , old:=z od, L[1] ],
              L
              od
      ], 1)

_________________
P.Fradin

P.Fradin
Admin

Nombre de messages : 1133
Age : 55
Date d'inscription : 19/01/2008

Voir le profil de l'utilisateur http://texgraph.tuxfamily.org/

Revenir en haut Aller en bas

Re: Problème sur les listes

Message  Joffrey le Mar 23 Déc - 22:08

Re,

Voici en fait la petite macro que j'essaie de mettre au point :


Code:
% TeXgraph version 1.94 beta-7.3.5
% Fenetre Xmin Xmax Ymin Ymax Xscale Yscale
100#-5#5#-5#5#1#1##
% Marges gauche droite haut bas cadre gestion_couleur comptgraph
101#0#0#0#0#0#1#1##
% Affectation des Variables theta et phi et type de perspective
18##[theta:=0.5236, phi:=1.0472,OriginalCoord(1),IdMatrix(),IdMatrix3D(),
ModelView(ortho)]##
% Déclaration des Variables Globales
15#r#5##
15#N#3##
15#nbit#50##
15#couleur#Rgb(Rand(),Rand(),Rand())##
15#pas#0.05##
% Déclaration des Macros
% Déclaration des Eléments graphiques
% objet1 (Utilisateur)
14#objet1#[
FillStyle:=full,
Color:=white-(0.3+0.7/N)*couleur,
FillColor:=(0.3+0.7/N)*couleur,

L:=Liste(for k from 0 to N do r*exp(2*i*k*pi/N) od),
Ligne([L, for k from 1 to nbit do
              old:=Nil,
              L:= [ for z in L do (1-pas)*old+pas*z , old:=z od, L[1] ],
              L
              od
      ], 0)
]#
-1##

Qui permet de dessiner des polygones "tournants".

Lorsque je prends par exemple, nbit=1 (nombres d'itérations égal à 1), j'ai un souci pour le deuxième triangle, as tu une solution?

Joffrey

Nombre de messages : 179
Age : 35
Localisation : Vichy(03) / Clermont-Ferrand(63)
Date d'inscription : 13/06/2008

Voir le profil de l'utilisateur http://mathex.servhome.org

Revenir en haut Aller en bas

Re: Problème sur les listes

Message  P.Fradin le Mar 23 Déc - 23:12

Bonsoir joffrey,

Il y a quelque petits problèmes avec la commande Ligne, je te propose ceci pour rectifier:

Code:

L:=Liste(for k from 1 to N do r*exp(2*i*k*pi/N) od),
Ligne([L, jump,
          for k from 1 to nbit do
              old:=Nil,
              L:= [ for z in L do (1-pas)*old+pas*z , old:=z od, pas*L[1]+(1-pas)*old ],
              L,jump
              od
      ], 1)

Il y avait un point de trop dans L, il manquait un saut entre chaque triangle, et il manquait la barycentration pour le dernier point.

Par contre je ne comprend pas trop ce que tu fais avec les couleurs! Celles-ci ne sont pas compatibles avec les opérations algébriques. Par exemple:


Color:= white-(0.3+0.7/N)*couleur,

Je suppose que tu veux faire un mixe, c'est possible de faire un barycentre comme ceci:
Color := MixColor( white, 1, couleur, -(0.3+0.7/N))

mais je ne garantis rien si on obtient des composantes négatives!

D'autre part, je suppose que tu veux changer la couleur de fond pour chaque triangle, je te propose alors ceci (une commande Ligne par triangle):

Code:

[
FillStyle:=full,
Color:=MixColor(white,1,couleur,-(0.3+0.7/N)),
FillColor:=white,

L:=Liste(for k from 1 to N do r*exp(2*i*k*pi/N) od),
Ligne(L,1),
for k from 1 to nbit do
              old:=Nil,
              L:= [ for z in L do (1-pas)*old+pas*z , old:=z od, pas*L[1]+(1-pas)*old ],
              FillColor:= MixColor(white,nbit-k,couleur,k),
              Ligne(L,1)
      od
]

mais on peut aussi faire une seule commande Ligne pour tous les triangles "tournés":

Code:

[
FillStyle:=full,
Color:=MixColor(white,1,couleur,-(0.3+0.7/N)),
FillColor:=white,

L:=Liste(for k from 1 to N do r*exp(2*i*k*pi/N) od),
Ligne(L,1),
Ligne(for k from 1 to nbit do
              old:=Nil,
              L:= [ for z in L do (1-pas)*old+pas*z , old:=z od, pas*L[1]+(1-pas)*old ],
              L, Re(jump)+i*(2+MixColor(white,nbit-k,couleur,k))
      od, 1)



_________________
P.Fradin

P.Fradin
Admin

Nombre de messages : 1133
Age : 55
Date d'inscription : 19/01/2008

Voir le profil de l'utilisateur http://texgraph.tuxfamily.org/

Revenir en haut Aller en bas

Re: Problème sur les listes

Message  Joffrey le Mer 24 Déc - 0:16

Re,

effectivement tout fonctionne correctement, merci.

Pour les couleurs, j'ai essayé de faire quelque chose d'original; mais j'en conviens ce que tu as fait est bien mieux.

J'avais trouvé ces petits dessins assez sympa, voici un petit mix de ce qu'on peut faire :


Je vais essayé d'utiliser MixColor (que je ne connaissais pas) pour la couleurs du fond.

Merci et bonne soirée

Joffrey

Nombre de messages : 179
Age : 35
Localisation : Vichy(03) / Clermont-Ferrand(63)
Date d'inscription : 13/06/2008

Voir le profil de l'utilisateur http://mathex.servhome.org

Revenir en haut Aller en bas

Re: Problème sur les listes

Message  P.Fradin le Mer 24 Déc - 0:27

Oui ça fait de jolis dessins! Alphonse avait initié cette idée pour des faire de polyèdres creux que l'on peut trouver dans ce fil:
http://texgraph.forumpro.fr/questions-reponses-f3/polyedresiimac-t3-125.htm

Quant à MixColor, c'est normal, elle n'est pas encore documentée Laughing


Dernière édition par P.Fradin le Mer 24 Déc - 15:49, édité 1 fois

_________________
P.Fradin

P.Fradin
Admin

Nombre de messages : 1133
Age : 55
Date d'inscription : 19/01/2008

Voir le profil de l'utilisateur http://texgraph.tuxfamily.org/

Revenir en haut Aller en bas

Re: Problème sur les listes

Message  Joffrey le Mer 24 Déc - 14:38

Bonjour,

effectivement je n'avais pas cherché du côté de polyèdres.mac.

Merci et bonne journée

Joffrey

Nombre de messages : 179
Age : 35
Localisation : Vichy(03) / Clermont-Ferrand(63)
Date d'inscription : 13/06/2008

Voir le profil de l'utilisateur http://mathex.servhome.org

Revenir en haut Aller en bas

Re: Problème sur les listes

Message  Contenu sponsorisé Aujourd'hui à 2:05


Contenu sponsorisé


Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum