Page 1 sur 1

Label et boucle

MessagePosté: Mercredi 04 Juin 2008, 18:15
par Coyote
Bonjour à tous,

toujours du asymptote, un rendu toujours aussi fantastique ... mais voilà je suis sur un os :
En fait je souhaite faire une boucle (avantage indéniable de Asymptote) et chaque fois qu'il me trace un segment, j'aimerai un label en rapport avec l'itération de ma boucle !
Un ECM (pas minimal d'accord :oops: ) mais si j'écris ça :

Code: Tout sélectionner
\documentclass[a4paper,10pt]{article}
\usepackage{asymptote}
\usepackage{verbatim}

\begin{asy}

unitsize(x=1cm,y=1cm) ;
import graph ;

real xmin = -2 ; real xmax = 6 ; real ymin = -1 ; real ymax = 5 ;

// Création des axes :
xaxis(-2, 6, Arrow) ;
yaxis(-1, 5, Arrow) ;
label("O", (-.125,-.125), SW, currentpen+fontsize(10)) ;
label("$\vec{i}$", (.5,0), S, currentpen+fontsize(10)) ;
label("$\vec{j}$", (0,0.5), W, currentpen+fontsize(10)) ;

for (int n = 0 ; n < 5; ++ n) {
   draw((n,0) -- (n, n)) ;
   label("n" , (n, n), N) ;
}

\end{asy}


Il m'affiche en haut de chaque bâton, n, et non pas le nombre ! Ce que j'ai pu lire et compris c'est qu'il prend ceci comme la liste "n" et non comme le nombre n.
J'ai essayé de créer une liste et de la remplir à chaque itération mais pas de succès non plus ! Si quelqu'un a une idée ?

Merci d'avance.

Re: [Asymptote] Label et boucle !

MessagePosté: Mercredi 04 Juin 2008, 20:10
par MB
Coyote a écrit:Il m'affiche en haut de chaque bâton, n, et non pas le nombre !


Oui, c'est normal.
Tu peux essayer d'utiliser la fonction format pour transformer un entier en chaine de caractères.

Re: [Asymptote] Label et boucle !

MessagePosté: Mercredi 04 Juin 2008, 20:19
par OG
Bonsoir

Une solution consiste à écrire

Code: Tout sélectionner
 string a=string(n);
 label(a , (n, n), N) ;


On peut faire des choses plus complexes, un jour je ne sais pas ce qui m'a pris pour une légende :

Code: Tout sélectionner
  legdicho="$\left\{\begin{aligned} \null & a_{"+string(i)+"}="+string(masuite[i][0])+"\\ & b
_{"+string(i)+"}="+string(masuite[i][1])+"\end{aligned}\right.$";


Cordialement
O.G.

Re: [Asymptote] Label et boucle !

MessagePosté: Mercredi 04 Juin 2008, 20:27
par Coyote
Merci à tous les deux pour les réponses ... !

J'ai essayé format, sans succès, je vais m'y plonger un peu plus dedans .. !

Nickel pour la solution de OG. Je vais maintenant essayer de comprendre le pourquoi du comment ... !

Merci en tout cas !

Cordialement.

Re: [Asymptote] Label et boucle !

MessagePosté: Mercredi 04 Juin 2008, 20:42
par OG
Pour tout avouer, j'ai appris cela sur le site de, devinez qui, Philippe Ivaldi, évidemment.
D'après le manuel

string string(real x, int digits=realDigits)
casts x using precision digits to a string, using the C locale;


Après on peut jouer avec la concaténation, etc.

O.G.

Re: [Asymptote] Label et boucle !

MessagePosté: Mercredi 04 Juin 2008, 21:06
par MB
Bizarre que ça ne marche pas format.
D'après le manuel :

string format(string s, int n)
returns a string containing n formatted according to the C-style format string s using the current locale;

Re: [Asymptote] Label et boucle !

MessagePosté: Mercredi 04 Juin 2008, 21:12
par OG
Chez moi la solution de MB fonctionne.

Code: Tout sélectionner
string a=format(n);
label(a , (n, n), N) ;


O.G.

Re: [Asymptote] Label et boucle !

MessagePosté: Jeudi 05 Juin 2008, 20:57
par Coyote
Bonsoir,

Ok pour le format, je ne l'avais pas vu comme ça ... effectivement, c'est mieux en passant par une variable ... :oops: .

Pour la soluce d'OG, dans le second exemple, dans le :

Code: Tout sélectionner
a_{"+string(i)+"}


je capte bien le + avant le string(i), on rajoute le "i", mais pas le + après ????

Pourquoi doit-on mettre ce + après ? Que rajoute-t-on ?

Argh .... ! Je sens que je ne suis pas au bout de mes peines ... :? .

Re: [Asymptote] Label et boucle !

MessagePosté: Jeudi 05 Juin 2008, 21:13
par OG
Bonsoir

La concaténation (dur à dire dur à écrire) se fait par +.
Si tu veux créer des étiquettes du styles $u_{10}$ à partir d'une boucle il suffit d'écrire
Code: Tout sélectionner
string a="$u_{"+string(i)+"}$";

(le code était sur 2 lignes)

Cordialement
O.G.

Re: [Asymptote] Label et boucle !

MessagePosté: Vendredi 06 Juin 2008, 08:37
par Coyote
Oui c'est ce que j'ai vu ... et justement c'est le dernier + que je ne comprends pas.

Code: Tout sélectionner
 string a="$u_{"+string(i)+"}$";


Ce que je comprends du code, on créé une chaine a, on met dedans u_, puis on ajoute (1er plus) l'indice et après ????????????

Pourquoi ce deuxièrme plus ? Qu'ajoute-ton ??

Il faut dire que je ne maitrise absolument ni C, ni C++ ?? D'ailleurs, faut-il que je m'y plonge en parallèle ?

Merci

Re: [Asymptote] Label et boucle !

MessagePosté: Vendredi 06 Juin 2008, 09:13
par OG
Bonjour

Je n'ai pas été assez clair.
Si tu veux créer la chaîne de caractère $u_i$ (avec bien sûr i un vrai entier issu de string(i)) le code "$u_{"+string(i)+"}$" donnera la bonne chaîne (ne pas oublier { car sinon u_10 ne donnera pas ce qu'il faut) : on assemble $u_{ i }$ (morceau 1 morceau 2 morceau 3).

Il faut bien voir que "string(i)" donnera la chaîne string(i) et pas i, d'où les 3 morceaux.
Mis à part cela je ne comprends pas trop.

Inutile de faire du C (ou du C++) pour continuer à faire du Asymptote, si tu as déjà fait un peu de Pascal ou un autre langage cela suffira pour les besoins courants et il y a toujours le forum. Ce qui compte plus c'est de "voir" les algorithmes.

Il y a un document qui a l'air très bien où on apprend la programmation (début) avec Asymptote. Malheureusement c'est en hollandais.

http://users.fulladsl.be/spb10695/asymptote.html

ça ne doit pas être très compliqué à traduire, mais il faut du temps.

O.G.

Re: [Asymptote] Label et boucle !

MessagePosté: Vendredi 06 Juin 2008, 09:17
par Coyote
Merci pour les réponses ... ! Effectivement sans les plus on n'obtient pas ce que l'on veut ... !


Reste plus qu'à faire des diapos avec les boucles mais ça c'est une autre histoire ... :D .

Re: [Asymptote] Label et boucle !

MessagePosté: Vendredi 06 Juin 2008, 10:25
par Ph. Ivaldi
Coyote a écrit:Reste plus qu'à faire des diapos avec les boucles mais ça c'est une autre histoire ... :D .

Si ça peut aider, la compilation avec pdflatex du code suivant donne le pdf joint.
Code: Tout sélectionner
\documentclass[pdftex]{article}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{textcomp}
\usepackage[inline]{asymptote}

\begin{document}
Du texte, du texte, du texte, du texte, du texte,
du texte, du texte, du texte, du texte, du texte,
du texte, du texte, du texte, du texte, du texte,
du texte, du texte, du texte.
\begin{center}
\begin{asy}
import animate;
animation A;

size(5cm);
for (int i=0; i < 10; ++i) {
  save();
  label(scale(5)*string(i),white);
  fill(unitcircle);
  A.add();
  restore();
}

label(A.pdf("controls",keep=true));
\end{asy}
\end{center}
Du texte, du texte, du texte, du texte, du texte,
du texte, du texte, du texte, du texte, du texte,
du texte, du texte, du texte, du texte, du texte,
du texte, du texte, du texte.
\end{document}

inlinemovie.pdf
(63.25 Kio) Téléchargé 156 fois

Re: [Asymptote] Label et boucle !

MessagePosté: Vendredi 06 Juin 2008, 10:58
par Coyote
Merci pour l'info !

En effet, j'avais déjà entendu parler de ce paquet animate, compatible seulement acrobat d'ailleurs.

Le soucis c'est qu l'on reste sur fichier << texte >> et non une présentation projetable type beamer !!!

J'avoue avoir eu l'idée utopique de mélanger du code beamer (latex) avec du code asymptote mais forcément ça plante. Par contre l'idée du paquet animate est à tester dans beamer ..... Ca peut être une solution très honorable.

Merci pour le tuyau :D .

Sinon j'ai entendu parler de animate ... je vais profiter de mon dernier mois de juin pseudo-libre pour tester tout ça !

Re: [Asymptote] Label et boucle !

MessagePosté: Vendredi 06 Juin 2008, 11:28
par Ph. Ivaldi
Coyote a écrit:J'avoue avoir eu l'idée utopique de mélanger du code beamer (latex) avec du code asymptote mais forcément ça plante.


Non, il n'y pas de problème avec beamer à condition de passer l'option fragile aux frames:

Code: Tout sélectionner
\documentclass[pdftex]{beamer}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{textcomp}
\usepackage[inline]{asymptote}

\begin{document}
\begin{frame}[fragile]
  Du texte, du texte, du texte.
  \begin{center}
\begin{asy}
import animate;
animation A;

size(5cm);
for (int i=0; i < 10; ++i) {
  save();
  label(scale(5)*string(i),white);
  fill(unitcircle);
  A.add();
  restore();
}

label(A.pdf("controls",keep=true));
\end{asy}
  \end{center}
  Du texte, du texte, du texte.
\end{frame}
\begin{frame}[fragile]
  Du texte, du texte, du texte.
  \begin{center}
\begin{asy}
import animate;
animation A;

size(5cm);
for (int i=0; i < 10; ++i) {
  save();
  label(scale(5)*string(9-i),white);
  fill(shift(-0.5,-0.5)*unitsquare,blue);
  A.add();
  restore();
}

label(A.pdf("controls",keep=true));
\end{asy}
  \end{center}
  Du texte, du texte, du texte.
\end{frame}
\end{document}


inlinemovie.pdf
(90.78 Kio) Téléchargé 155 fois

Re: [Asymptote] Label et boucle !

MessagePosté: Vendredi 06 Juin 2008, 12:49
par Coyote
Argh, désolé je me suis mal exprimé !! En fait c'est mettre du code beamer (genre la commande \pause) dans l'environnement asy !

C'est là que ça coince !

Merci en tout cas pour l'aide ...

En relisant mon dernier post, c'était slide que je voulais aussi tester !!!