Problème sur les listes
2 participants
Page 1 sur 1
Problème sur les listes
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
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
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]
- Code:
L:=Liste(for k from 1 to 2 do 4*L[k]-2*L[k+1] od,1)
- Code:
Ligne(for z from 1 to 3 do L[k] od,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?
Bonne journée
Re: Problème sur les listes
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, mettonsje souhaite "transformer cette liste" en
- Code:
L:=[1,i,-1]
- 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)
Re: Problème sur les listes
Re,
Voici en fait la petite macro que j'essaie de mettre au point :
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?
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?
Re: Problème sur les listes
Bonsoir joffrey,
Il y a quelque petits problèmes avec la commande Ligne, je te propose ceci pour rectifier:
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:
Je suppose que tu veux faire un mixe, c'est possible de faire un barycentre comme ceci:
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):
mais on peut aussi faire une seule commande Ligne pour tous les triangles "tournés":
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)
]
Re: Problème sur les listes
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
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
Re: Problème sur les listes
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:
https://texgraph.forumpro.fr/questions-reponses-f3/polyedresiimac-t3-125.htm
Quant à MixColor, c'est normal, elle n'est pas encore documentée
https://texgraph.forumpro.fr/questions-reponses-f3/polyedresiimac-t3-125.htm
Quant à MixColor, c'est normal, elle n'est pas encore documentée
Dernière édition par P.Fradin le Mer 24 Déc - 15:49, édité 1 fois
Re: Problème sur les listes
Bonjour,
effectivement je n'avais pas cherché du côté de polyèdres.mac.
Merci et bonne journée
effectivement je n'avais pas cherché du côté de polyèdres.mac.
Merci et bonne journée
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum
|
|