Page 1 sur 2

Faire cing figures avec une seule !

Posté : mer. 2 janv. 2019, 12:12
par Fabrice
Bonjour,
Le but est de produire les cinq figures ci après :

https://goopics.net/i/r5VP7

J'ai fait une seule figure, mais comment faire pour en avoir cinq séparées ? Je sais que tu vas me répondre qu'il suffit d'en faire cinq, mais mon problème est d'avoir la base du carré principal alignée sur la même ligne de base. Je ne sais pas si je suis suffisamment clair !

Code : Tout sélectionner

import trembling ;
import geometry ;
unitsize(1cm,1cm);

real a = 1.5;

pair centre = (a/2,a/2);

transform h=scale(2/sqrt(2),centre);

path carre = scale(a)*unitsquare ;
path p1 = (a,a)--(a,0)--(0,a) ;
path p2 = (a,a)--(a+a*sqrt(3)/2,a/2)--(a,0) ; 
path p3 = (0,a)--(-a*sqrt(3)/2,a/2)--(0,0) ;

tremble tr=tremble(angle=4,
                   frequency=.5,
                   random=2) ;

add(shift(-1,-1)*grid(25,7,gray)) ;

draw(tr.deform(carre--p1),magenta+2bp) ;
draw(shift(1.5*a,0)*tr.deform(carre--p1--p2),magenta+2bp) ;
draw(shift(5*a,0)*tr.deform(carre--p2--p3),magenta+2bp) ;
draw(shift(7.5*a,0)*tr.deform(carre),magenta+2bp) ;
draw(shift(8*a,-a/4)*rotate(45)*tr.deform(h*carre),magenta+2bp) ;
draw(shift(10.5*a,-a/4)*rotate(45)*tr.deform(h*carre),magenta+2bp) ;
draw(shift(10*a,0)*tr.deform(carre--p1),magenta+2bp) ;
shipout(bbox(Fill(lightgray))) ;

Merci.
fabrice

Re: Faire cing figures avec une seule !

Posté : mer. 2 janv. 2019, 13:10
par GM
Fabrice a écrit :
mer. 2 janv. 2019, 12:12
Bonjour,
Le but est de produire les cinq figures ci après :

https://goopics.net/i/r5VP7
Bonjour,

as-tu songé à une animation dans un pdf multipage ?

Code : Tout sélectionner

import trembling ;
import geometry ;
import animate;

unitsize(1cm,1cm);

settings.tex="pdflatex";
settings.outformat="pdf";

int a = 2;
pen stylo = magenta+2bp;

pair centre = (a/2,a/2);
transform h=scale(2/sqrt(2),centre);
path carre = scale(a)*unitsquare ;
path p1 = (a,a)--(a,0)--(0,a) ;
path p2 = (a,a)--(a+a*sqrt(3)/2,a/2)--(a,0) ; 
path p3 = (0,a)--(-a*sqrt(3)/2,a/2)--(0,0) ;

tremble tr=tremble(angle=4,
                   frequency=.5,
                   random=2) ;

animation A;

add(shift(-a,-a)*grid(3*a,3*a,grey)) ;
A.add(); save();
draw(tr.deform(carre--p1),stylo) ;
A.add(); restore(); save();
draw(tr.deform(carre--p1--p2),stylo) ;
A.add(); restore(); save();
draw(tr.deform(carre--p2--p3),stylo) ;
A.add(); restore(); save();
draw(tr.deform(carre),stylo) ;
draw(shift(a/2,-a/4)*rotate(45)*tr.deform(h*carre),stylo) ;
A.add(); restore(); save();
draw(tr.deform(carre--p1),stylo) ;
A.add();

A.movie();
Cela génère un pdf multipage
asy_2019_01_02_fabrice_fig2.pdf
(6.32 Kio) Téléchargé 525 fois
et avec un package tel que pdfpagestu peux inclure les pages que tu veux du pdf.

Re: Faire cing figures avec une seule !

Posté : mer. 2 janv. 2019, 16:43
par OG
Fabrice a écrit :
mer. 2 janv. 2019, 12:12
Bonjour,
Le but est de produire les cinq figures ci après :

https://goopics.net/i/r5VP7

J'ai fait une seule figure, mais comment faire pour en avoir cinq séparées ? Je sais que tu vas me répondre qu'il suffit d'en faire cinq, mais mon problème est d'avoir la base du carré principal alignée sur la même ligne de base. Je ne sais pas si je suis suffisamment clair !

En quoi faire cinq figures séparées (dans un même fichier asy) pose un pb d'alignement ?

O.G.

Re: Faire cing figures avec une seule !

Posté : mer. 2 janv. 2019, 17:51
par GM
OG a écrit :
mer. 2 janv. 2019, 16:43
En quoi faire cinq figures séparées (dans un même fichier asy) pose un pb d'alignement ?
Il nous le dira mais j'imagine qu'il a essayé de faire des figures dans des fichiers distincts sans mettre la grille.

Re: Faire cing figures avec une seule !

Posté : mer. 2 janv. 2019, 18:13
par OG
GM a écrit :
mer. 2 janv. 2019, 17:51
OG a écrit :
mer. 2 janv. 2019, 16:43
En quoi faire cinq figures séparées (dans un même fichier asy) pose un pb d'alignement ?
Il nous le dira mais j'imagine qu'il a essayé de faire des figures dans des fichiers distincts sans mettre la grille.
Peut-être que le pb concerne l'alignement des 5 figures dans le fichier LaTeX ?

Re: Faire cing figures avec une seule !

Posté : mer. 2 janv. 2019, 18:21
par GM
OG a écrit :
mer. 2 janv. 2019, 18:13
GM a écrit :
mer. 2 janv. 2019, 17:51
OG a écrit :
mer. 2 janv. 2019, 16:43
En quoi faire cinq figures séparées (dans un même fichier asy) pose un pb d'alignement ?
Il nous le dira mais j'imagine qu'il a essayé de faire des figures dans des fichiers distincts sans mettre la grille.
Peut-être que le pb concerne l'alignement des 5 figures dans le fichier LaTeX ?
oui c'est ce que je sous-entendais.

Voilà une version qui générera 5 fichiers distincts avec une grille invisible pour que l'alignement se passe bien lors de la juxtaposition des images dans le fichier latex.

Code : Tout sélectionner

import trembling ;
import geometry ;

unitsize(1cm,1cm);

settings.tex="pdflatex";
settings.outformat="pdf";

int a = 2;
pen stylo = magenta+2bp;

pair centre = (a/2,a/2);
transform h=scale(2/sqrt(2),centre);
path carre = scale(a)*unitsquare ;
path p1 = (a,a)--(a,0)--(0,a) ;
path p2 = (a,a)--(a+a*sqrt(3)/2,a/2)--(a,0) ; 
path p3 = (0,a)--(-a*sqrt(3)/2,a/2)--(0,0) ;

tremble tr=tremble(angle=4,
                   frequency=.5,
                   random=2);

add(shift(-a,-a)*grid(3*a,3*a,invisible));
save();
draw(tr.deform(carre--p1),stylo) ;
shipout ("fig_fabrice_1.pdf"); restore(); save();
draw(tr.deform(carre--p1--p2),stylo) ;
shipout ("fig_fabrice_2.pdf"); restore(); save();
draw(tr.deform(carre--p2--p3),stylo) ;
shipout ("fig_fabrice_3.pdf"); restore(); save();
draw(tr.deform(carre),stylo) ;
draw(shift(a/2,-a/4)*rotate(45)*tr.deform(h*carre),stylo) ;
shipout ("fig_fabrice_4.pdf"); restore(); save();
draw(tr.deform(carre--p1),stylo) ;
shipout ("fig_fabrice_5.pdf");

Re: Faire cing figures avec une seule !

Posté : mer. 2 janv. 2019, 18:42
par GM
Je vais virer les "shift(0,0)" inutiles dans les exemples qui précèdent : j'aurais dû les enlever de suite quand j'ai testé le code de Fabrice au lieu de passer la valeur à 0 du décalage horizontal.

Edition (3 min plus tard) : c'est fait... et j'ai défini un "pen".

Re: Faire cing figures avec une seule !

Posté : jeu. 3 janv. 2019, 01:57
par Fabrice
Bonjour,
Tout d'abord merci pour avoir pris le temps de solutionner mon problème. En fait, j'ai essayé dans un premier temps de faire cinq figures dans un seul fichier asy en essayant d'utiliser size(5cm,0), par exemple, et en imaginant tirer un trait horizontal de manière à ce que chaque carré de chaque figure repose sur cette ligne (instruction baseline avec tikz je pense), mais sans succès, notamment avec la grille.
Questions :
- J'ai un peu oublié le rôle des instructions save() et restore() : par exemple, si on enlève le save() juste après l'ajout de la grille, on obtient les mêmes figures.
- Comment marquer chaque figure par un numéro entouré par un cercle ?
- Je trouve que dans la figure 4, le carré ne me semble pas inscrit dans le plus plus grand carré ; est-ce le "trembling" ?
Fabrice

Re: Faire cing figures avec une seule !

Posté : jeu. 3 janv. 2019, 03:34
par GM
A propos du save(), je l'avais mis pour éviter un warning constaté en console mais il est vrai qu'un avertissement n'est pas une erreur.

Une version complètement ré-écrite (j'ai tout bouleversé :-)) :

Code : Tout sélectionner

import trembling ;
import geometry ;

unitsize(1cm,1cm);

settings.tex="pdflatex";
settings.outformat="pdf";

int a = 2;
pen feutre = magenta+2bp,
    stylo = red+1bp;

tremble tr=tremble(angle=4,
                   frequency=.5,
                   random=2);

path carre = shift(-a/2,-a/2)*scale(a)*unitsquare,
     tcarre = tr.deform(carre),
     tdiago1 = tr.deform(point(carre,0)--point(carre,2)),
     tdiago2  = tr.deform(point(carre,1)--point(carre,3)),
     tpointe = tr.deform(point(carre,1)--(a,0)--point(carre,2));

path[][] fig;

fig.push(tcarre^^tdiago1^^tdiago2);
fig.push(fig[0]^^tpointe);
fig.push(tcarre^^tpointe^^rotate(180)*tpointe);
fig.push(fig[2]^^rotate(90)*tpointe^^rotate(270)*tpointe);
fig.push(fig[3]^^tdiago1^^tdiago2);

add(shift(-1.5a,-1.5a)*grid(3*a,3*a,invisible));
for(var k=0; k<fig.length; ++k){
    save();
    draw(fig[k],feutre) ;
    draw(format("%d",k+1),ellipse,(0,-1.5a),2mm,stylo);
    shipout(format("fig_fabrice_%d.pdf",k+1));
    restore();
}
Edition ultérieure : la modification suggérée dans mon message qui suit en page suivante a été apportée au code ci-dessus.

Re: Faire cing figures avec une seule !

Posté : jeu. 3 janv. 2019, 11:55
par Fabrice
Salut Gaetan,
GM a écrit :
jeu. 3 janv. 2019, 03:34
Une version complètement ré-écrite (j'ai tout bouleversé :-)) :
Je te reconnais bien là !
Super boulot mais il y a encore un petit soucis au niveau de la numérotation.
Merci.
Fabrice