Pour toute demande d'aide sur des exemples non finalisés, c'est ici.
Les exemples aboutis et intéressants seront ajoutés aux sous-forums qui suivent.
Règles du forum
Pour toute demande d'aide pour la conception (ou la confirmation d'un code) d'une figure Asymptote, c'est ici.
J'invite ceux qui ont régulièrement des questions à poser à aller dans leur panneau de l'utilisateur pour indiquer dans la signature de leurs messages :
- Nom du système d'exploitation (W7 ou Ubuntu 12.04 ou ...)
- Version d'Asymptote et éditeur utilisé pour les figures Asymptote
- Distribution LaTeX et éditeur utilisé pour les tex.
On va gagner du temps dans les réponses !
-
maurice
- Messages : 262
- Enregistré le : jeu. 25 mars 2010, 13:00
-
Contact :
Message non lu
par maurice » jeu. 29 août 2013, 22:20
Bonjour, j'ai besoin de quelques précisions pour l'utilisation de buildcycle.
Pour le trefle, pas de problème, même si je ne sais pas si l'imbrication des buildcycle est recommendée...
*** Pour masquer/découvrir le code Asymptote qui a permis de créer la figure, il faut cliquer dessus. ;-) ***
- CODE ASYMPTOTE de la figure ci-dessus :
Tout sélectionner
size(200);
path trefle(pair a, pair b)
{
real angle=60;
pair centre=((a.x+b.x)/2, (4*a.y+3*b.y)/7),
p1=((3*a.x+b.x)/4, (3*a.y+b.y)/4),
p2=(a.x, centre.y),
p3=(p1.x, p2.y+centre.y-p1.y);
path feuille1=centre{dir(180+angle)}..{left}p1{left}..{up}p2{up}..{right}p3{right}..{dir(-angle)}cycle;
path feuille2=rotate(-90, centre)*feuille1;
path feuille3=rotate(180, centre)*feuille1;
path pied=((9*centre.x+b.x)/10, centre.y){down}..{right}((a.x+3*b.x)/4, a.y)--((3*a.x+b.x)/4, a.y){right}..{up}((9*centre.x+a.x)/10, centre.y);
path g=buildcycle(buildcycle(buildcycle(feuille1, feuille2), feuille3), pied);
// path[] g={feuille1, feuille2, feuille3, pied};
return g;
}
path p=trefle((-1,-1), (1,1));
draw(p);
Mais pour le trefle à 4 feuilles, il y a un petit soucis :
*** Pour masquer/découvrir le code Asymptote qui a permis de créer la figure, il faut cliquer dessus. ;-) ***
- CODE ASYMPTOTE de la figure ci-dessus :
Tout sélectionner
size(200);
path trefle4(pair a, pair b)
{
real angle=60;
pair centre=((a.x+b.x)/2, (4*a.y+3*b.y)/7),
p1=((3*a.x+b.x)/4, (3*a.y+b.y)/4),
p2=(a.x, centre.y),
p3=(p1.x, p2.y+centre.y-p1.y);
path feuille1=centre{dir(180+angle)}..{left}p1{left}..{up}p2{up}..{right}p3{right}..{dir(-angle)}cycle;
path feuille2=rotate(-90, centre)*feuille1;
path feuille3=rotate(180, centre)*feuille1;
path feuille4=rotate(90, centre)*feuille1;
path g=buildcycle(buildcycle(buildcycle(feuille1, feuille2), feuille3), feuille4);
return g;
}
path p=trefle4((-1,-1), (1,1));
draw(p);
Merci d'avance
Bruno
Doc 3D
Si ça ne marche pas, essayez
la version pdf
Fedora 23 -- Asymptote 2.35 -- TeXlive 2013 -- emacs et/ou gedit
-
GM
- Administrateur du site
- Messages : 1512
- Enregistré le : dim. 7 mars 2010, 14:50
Message non lu
par GM » ven. 30 août 2013, 08:11
maurice a écrit :Bonjour, j'ai besoin de quelques précisions pour l'utilisation de buildcycle.
Pour le trèfle, pas de problème, même si je ne sais pas si l'imbrication des buildcycle est recommandée...
Bonjour,
en fait... c'est l'utilisation de buildcycle dont on peut se demander si elle est recommandée, étant donné qu'elle ne peut s'employer sans tâtonner, tellement le résultat est imprévisible. Pour ceux qui passent par là... sans connaitre cette fonction, je rappelle une série d'exemples (
http://www.marris.org/asymptote/Contours_Domaines/index.html#fig_bc01_300309_buildcycle) qui montre à quel point, cela peut-être subtile... au point d'ailleurs que la doc d'Asymptote n'en parle pas, je crois, car buildcycle se veut une commande interne dont JCBowman n'a pas fait la promotion dans la galerie officielle.
Pour l'imbrication... pourquoi pas.
Pour le trèfle, je n'y ai pas encore réfléchi.
Index des fonctions - Exemple de lien donnant le résultat d'une recherche sur les mots 'arc' et 'triple' :
http://asy.marris.fr/indexasy/?filtre=arc triple
Mes configurations (le 24/02/21) :
PC n°1 :
Windows 10 - Asymptote(2.82)+MikTeX2.9 - Editeurs : Notepad++, TeXworks, Visual Studio Code.
PC n°2 :
Ubuntu 20.04LTS - Asymptote(2.67-?? git) + TexLive2020
Mon serveur :
Debian Stretch- Asymptote(2.68-16 git) + TexLive2018
Merci de préciser la votre !
-
GM
- Administrateur du site
- Messages : 1512
- Enregistré le : dim. 7 mars 2010, 14:50
Message non lu
par GM » ven. 30 août 2013, 08:38
GM a écrit :Pour le trèfle, je n'y ai pas encore réfléchi.
Je viens de le faire... en numérotant les noeuds : seule façon de voir ce que fait buildcycle.
*** Pour masquer/découvrir le code Asymptote qui a permis de créer la figure, il faut cliquer dessus. ;-) ***
- CODE ASYMPTOTE de la figure ci-dessus :
Tout sélectionner
size(200);
path trefle4(pair a, pair b)
{
real angle=60;
pair centre=((a.x+b.x)/2, (4*a.y+3*b.y)/7),
p1=((3*a.x+b.x)/4, (3*a.y+b.y)/4),
p2=(a.x, centre.y),
p3=(p1.x, p2.y+centre.y-p1.y);
path feuille1=centre{dir(180+angle)}..{left}p1{left}..{up}p2{up}..{right}p3{right}..{dir(-angle)}cycle;
path feuille2=rotate(-90, centre)*feuille1;
path feuille3=rotate(180, centre)*feuille1;
path feuille4=rotate(90, centre)*feuille1;
path g=buildcycle(buildcycle(feuille1, feuille2), feuille3);
draw(g,3bp+red);
for(int k=0; k<size(g); ++k) dot(string(k),point(g,k),4bp+red,align=E);
draw(feuille4,3bp+blue);
for(int k=0; k<size(feuille4); ++k) dot(string(k),point(feuille4,k),4bp+blue,align=W);
g=buildcycle(g,feuille4);
return g;
}
path p=trefle4((-1,-1), (1,1));
draw(p,.8bp+green);
for(int k=0; k<size(p); ++k) dot(string(k),point(p,k),2bp+green,align=S);
Et cela permet de comprendre que buildcycle cherche les points communs aux
paths mais ne tient compte que de deux d'entre eux.
Or ici, les
paths
buildcycle(buildcycle(feuille1, feuille2), feuille3) et
g ont trois points communs et l'un est ignoré dans la construction résultante.
Index des fonctions - Exemple de lien donnant le résultat d'une recherche sur les mots 'arc' et 'triple' :
http://asy.marris.fr/indexasy/?filtre=arc triple
Mes configurations (le 24/02/21) :
PC n°1 :
Windows 10 - Asymptote(2.82)+MikTeX2.9 - Editeurs : Notepad++, TeXworks, Visual Studio Code.
PC n°2 :
Ubuntu 20.04LTS - Asymptote(2.67-?? git) + TexLive2020
Mon serveur :
Debian Stretch- Asymptote(2.68-16 git) + TexLive2018
Merci de préciser la votre !
-
GM
- Administrateur du site
- Messages : 1512
- Enregistré le : dim. 7 mars 2010, 14:50
Message non lu
par GM » ven. 30 août 2013, 09:00
Je vais devoir ajouter un exemple dans la galerie (où les paths ont davantage que deux points d'intersection) pour convaincre que buildcycle n'est pas d'usage simple et n'a pas été conçu pour l'être puisqu'elle n'est pas dans la doc Asymptote. Et donc, cela peut donner des résultats surprenant comme ceux-ci :
*** Pour masquer/découvrir le code Asymptote qui a permis de créer la figure, il faut cliquer dessus. ;-) ***
- CODE ASYMPTOTE de la figure ci-dessus :
Tout sélectionner
size(300);
path p1=(0,0)--(1,1)--(-.5,1.5)--(-0.5,-1.5)--cycle;
path p2=unitcircle;
path p=buildcycle(p1,p2);
fill(p,gray);
draw(p1,3bp+.7blue); draw(p2,3bp+.7red);
draw(p,1bp+yellow);
defaultpen(fontsize(16pt));
for(int i=0; i<length(p1); ++i)
dot(string(i),point(p1,i),SW,5bp+.7blue);
for(int i=0; i<length(p2); ++i)
dot(string(i),point(p2,i),SW,5bp+.7red);
for(int i=0; i<length(p); ++i)
dot(string(i),point(p,i),E,3bp+black);
*** Pour masquer/découvrir le code Asymptote qui a permis de créer la figure, il faut cliquer dessus. ;-) ***
- CODE ASYMPTOTE de la figure ci-dessus :
Tout sélectionner
size(300);
path p1=(0,0)--(1,1)--(-.5,1.5)--(-0.5,-1.5)--cycle;
path p2=unitcircle;
path p=buildcycle(p2,p1);
fill(p,gray);
draw(p1,3bp+.7blue); draw(p2,3bp+.7red);
draw(p,1bp+yellow);
defaultpen(fontsize(16pt));
for(int i=0; i<length(p1); ++i)
dot(string(i),point(p1,i),SW,5bp+.7blue);
for(int i=0; i<length(p2); ++i)
dot(string(i),point(p2,i),SW,5bp+.7red);
for(int i=0; i<length(p); ++i)
dot(string(i),point(p,i),E,3bp+black);
*** Pour masquer/découvrir le code Asymptote qui a permis de créer la figure, il faut cliquer dessus. ;-) ***
- CODE ASYMPTOTE de la figure ci-dessus :
Tout sélectionner
size(300);
path p1=(0,0)--(1,1)--(-.5,1.5)--(-0.5,-1.5)--cycle;
path p2=unitcircle;
path p3=shift(-0.1,1.1)*unitcircle;
path p=buildcycle(p1,p2,p3);
fill(p,gray);
draw(p1,3bp+.7blue); draw(p2,3bp+.7red); draw(p3,3bp+.7green);
draw(p,1bp+yellow);
defaultpen(fontsize(16pt));
for(int i=0; i<length(p1); ++i)
dot(string(i),point(p1,i),SW,5bp+.7blue);
for(int i=0; i<length(p2); ++i)
dot(string(i),point(p2,i),SW,5bp+.7red);
for(int i=0; i<length(p3); ++i)
dot(string(i),point(p3,i),E,5bp+.5green);
for(int i=0; i<length(p); ++i)
dot(string(i),point(p,i),N,4bp+black);
*** Pour masquer/découvrir le code Asymptote qui a permis de créer la figure, il faut cliquer dessus. ;-) ***
- CODE ASYMPTOTE de la figure ci-dessus :
Tout sélectionner
size(300);
path p1=(0,0)--(1,1)--(-.5,1.5)--(-0.5,-1.5)--cycle;
path p2=unitcircle;
path p3=shift(-0.1,1.1)*unitcircle;
path p=buildcycle(p3,p2,p1);
fill(p,gray);
draw(p1,3bp+.7blue); draw(p2,3bp+.7red); draw(p3,3bp+.7green);
draw(p,1bp+yellow);
defaultpen(fontsize(16pt));
for(int i=0; i<length(p1); ++i)
dot(string(i),point(p1,i),SW,5bp+.7blue);
for(int i=0; i<length(p2); ++i)
dot(string(i),point(p2,i),SW,5bp+.7red);
for(int i=0; i<length(p3); ++i)
dot(string(i),point(p3,i),E,5bp+.5green);
for(int i=0; i<length(p); ++i)
dot(string(i),point(p,i),N,4bp+black);
Ces exemples doivent permettre de réaliser que faire des fonctions impliquant buildcycle pourrait donner des résultats inattendus... suivant les valeurs données aux paramètres.
Index des fonctions - Exemple de lien donnant le résultat d'une recherche sur les mots 'arc' et 'triple' :
http://asy.marris.fr/indexasy/?filtre=arc triple
Mes configurations (le 24/02/21) :
PC n°1 :
Windows 10 - Asymptote(2.82)+MikTeX2.9 - Editeurs : Notepad++, TeXworks, Visual Studio Code.
PC n°2 :
Ubuntu 20.04LTS - Asymptote(2.67-?? git) + TexLive2020
Mon serveur :
Debian Stretch- Asymptote(2.68-16 git) + TexLive2018
Merci de préciser la votre !
-
maurice
- Messages : 262
- Enregistré le : jeu. 25 mars 2010, 13:00
-
Contact :
Message non lu
par maurice » ven. 30 août 2013, 21:14
Merci pour les explications, je vais étudier tout ça et essayer de trouver une solution sans de buildcycle.
Bruno
Doc 3D
Si ça ne marche pas, essayez
la version pdf
Fedora 23 -- Asymptote 2.35 -- TeXlive 2013 -- emacs et/ou gedit
-
maurice
- Messages : 262
- Enregistré le : jeu. 25 mars 2010, 13:00
-
Contact :
Message non lu
par maurice » sam. 31 août 2013, 22:07
Bonjour, j'ai utilisé intersections(path, path); et subpath(path, rfeal, real);
*** Pour masquer/découvrir le code Asymptote qui a permis de créer la figure, il faut cliquer dessus. ;-) ***
- CODE ASYMPTOTE de la figure ci-dessus :
Tout sélectionner
size(200);
path[] g5(pair a, pair b)
{
real angle=60;
pair centre=((a.x+b.x)/2, (4*a.y+3*b.y)/7),
p1=((3*a.x+b.x)/4, (3*a.y+b.y)/4),
p2=(a.x, centre.y),
p3=(p1.x, p2.y+centre.y-p1.y);
path f1=centre{dir(180+angle)}..{left}p1{left}..{up}p2{up}..{right}p3{right}..{dir(-angle)}cycle;
path f2=rotate(-90, centre)*(centre{dir(180+angle)}..{left}p1);
path f3=rotate(90, centre)*(p3{right}..{dir(-angle)}centre);
real[][] t2=intersections(f1, f2);
real[][] t3=intersections(f1, f3);
path feuille=subpath(f1, t3[1][0], t2[1][0]);
// draw(feuille, 4bp+red);
// return buildcycle(feuille, rotate(90,centre)*feuille, rotate(180,centre)*feuille, rotate(270, centre)*feuille);
return feuille^^rotate(90,centre)*feuille^^rotate(180,centre)*feuille^^rotate(270, centre)*feuille;
}
path[] p=g5((-1,-1), (1,1));
draw(p, 2bp+green);
Avec le buildcycle et des path à la place de path[], ça marche aussi ! Par contre, dans le cas ci-dessus je ne peux pas remplir le text. Pour cela, il faut utiliser buildcycle.
Y'a-t-il une fonction concaténation pour les path ?
Bruno
Doc 3D
Si ça ne marche pas, essayez
la version pdf
Fedora 23 -- Asymptote 2.35 -- TeXlive 2013 -- emacs et/ou gedit
-
GM
- Administrateur du site
- Messages : 1512
- Enregistré le : dim. 7 mars 2010, 14:50
Message non lu
par GM » sam. 31 août 2013, 23:09
maurice a écrit :Y'a-t-il une fonction concaténation pour les path ?
Oui... et tu vas te dire : pourquoi je n'y ai pas pensé ?
)
Je n'ai modifié que la fin pour répondre à ta question... sans lire en détail le début, mais je crois que tu as fait les choses de façon bien compliquée, il me semble.
*** Pour masquer/découvrir le code Asymptote qui a permis de créer la figure, il faut cliquer dessus. ;-) ***
- CODE ASYMPTOTE de la figure ci-dessus :
Tout sélectionner
size(200);
path[] g5(pair a, pair b)
{
real angle=60;
pair centre=((a.x+b.x)/2, (4*a.y+3*b.y)/7),
p1=((3*a.x+b.x)/4, (3*a.y+b.y)/4),
p2=(a.x, centre.y),
p3=(p1.x, p2.y+centre.y-p1.y);
path f1=centre{dir(180+angle)}..{left}p1{left}..{up}p2{up}..{right}p3{right}..{dir(-angle)}cycle;
path f2=rotate(-90, centre)*(centre{dir(180+angle)}..{left}p1);
path f3=rotate(90, centre)*(p3{right}..{dir(-angle)}centre);
real[][] t2=intersections(f1, f2);
real[][] t3=intersections(f1, f3);
path feuille=subpath(f1, t3[1][0], t2[1][0]);
return feuille--(rotate(-90,centre)*feuille)--(rotate(-180,centre)*feuille)--(rotate(-270,centre)*feuille)--cycle;
}
path[] p=g5((-1,-1), (1,1));
filldraw(p, green, 2bp+.5green);
Index des fonctions - Exemple de lien donnant le résultat d'une recherche sur les mots 'arc' et 'triple' :
http://asy.marris.fr/indexasy/?filtre=arc triple
Mes configurations (le 24/02/21) :
PC n°1 :
Windows 10 - Asymptote(2.82)+MikTeX2.9 - Editeurs : Notepad++, TeXworks, Visual Studio Code.
PC n°2 :
Ubuntu 20.04LTS - Asymptote(2.67-?? git) + TexLive2020
Mon serveur :
Debian Stretch- Asymptote(2.68-16 git) + TexLive2018
Merci de préciser la votre !
-
GM
- Administrateur du site
- Messages : 1512
- Enregistré le : dim. 7 mars 2010, 14:50
Message non lu
par GM » sam. 31 août 2013, 23:14
GM a écrit :... mais je crois que tu as fait les choses de façon bien compliquée, il me semble.
Par curiosité, je viens de placer les points (-1,-1) et (1,1) et le placement du trèfle par rapport à ces points me fait m'interroger : pourquoi si compliqué ? Où est la motivation dans ce choix de centre ?
Index des fonctions - Exemple de lien donnant le résultat d'une recherche sur les mots 'arc' et 'triple' :
http://asy.marris.fr/indexasy/?filtre=arc triple
Mes configurations (le 24/02/21) :
PC n°1 :
Windows 10 - Asymptote(2.82)+MikTeX2.9 - Editeurs : Notepad++, TeXworks, Visual Studio Code.
PC n°2 :
Ubuntu 20.04LTS - Asymptote(2.67-?? git) + TexLive2020
Mon serveur :
Debian Stretch- Asymptote(2.68-16 git) + TexLive2018
Merci de préciser la votre !
-
maurice
- Messages : 262
- Enregistré le : jeu. 25 mars 2010, 13:00
-
Contact :
Message non lu
par maurice » sam. 31 août 2013, 23:51
Bonsoir,
GM a écrit :maurice a écrit :Y'a-t-il une fonction concaténation pour les path ?
Oui... et tu vas te dire : pourquoi je n'y ai pas pensé ?
)
J'y avais effectivement pensé mais avec des mesures d'angles positives, du coup, forcément ...
GM a écrit :GM a écrit :... mais je crois que tu as fait les choses de façon bien compliquée, il me semble.
Par curiosité, je viens de placer les points (-1,-1) et (1,1) et le placement du trèfle par rapport à ces points me fait m'interroger : pourquoi si compliqué ? Où est la motivation dans ce choix de centre ?
C'est juste que je suis parti du trèfle à trois feuilles (post1) et je voulais que le pied soit un peu plus long ! C'est tout. Ce n'est effectivement pas justifié pour ici.
Quant au reste, je n'est pas trouvé plus simple pour faire une feuille que d'utiliser le tableau real[][] intersections.
*** Pour masquer/découvrir le code Asymptote qui a permis de créer la figure, il faut cliquer dessus. ;-) ***
- CODE ASYMPTOTE de la figure ci-dessus :
Tout sélectionner
size(150);
pair a=(-1,-1), b=(1,1);
real angle=60;
pair centre=((a.x+b.x)/2, (4*a.y+3*b.y)/7),
p1=((3*a.x+b.x)/4, (3*a.y+b.y)/4),
p2=(a.x, centre.y),
p3=(p1.x, p2.y+centre.y-p1.y);
path f1=centre{dir(180+angle)}..{left}p1{left}..{up}p2{up}..{right}p3{right}..{dir(-angle)}cycle;
path f2=rotate(-90, centre)*(centre{dir(180+angle)}..{left}p1);
path f3=rotate(90, centre)*(p3{right}..{dir(-angle)}centre);
real[][] t2=intersections(f1, f2);
real[][] t3=intersections(f1, f3);
path feuille=subpath(f1, t3[1][0], t2[1][0]);
draw(feuille, 2bp+green);
Il y a plus simple ?
Sinon, plus généralement, le but du jeu était de créer des enveloppes comme dans ce
sujet.
Bruno
Doc 3D
Si ça ne marche pas, essayez
la version pdf
Fedora 23 -- Asymptote 2.35 -- TeXlive 2013 -- emacs et/ou gedit
-
GM
- Administrateur du site
- Messages : 1512
- Enregistré le : dim. 7 mars 2010, 14:50
Message non lu
par GM » dim. 1 sept. 2013, 00:04
maurice a écrit :Il y a plus simple ?
Cela dépend : la forme d'une feuille... devait répondre à des critères précis ou tu as choisi une forme approximative en tâtonnant ?
Je me pose d'autres questions : pourquoi cette fonction avec deux points en paramètre ?
Si c'est censé permettre avoir des trèfles plus ou moins allongé... change l'une des coordonnées du second point... et tu verras.
Donc je me demande le pourquoi de ces points en paramètres.
Tu parles d'enveloppe : où espères voir le texte dans ce trèfle ?
Index des fonctions - Exemple de lien donnant le résultat d'une recherche sur les mots 'arc' et 'triple' :
http://asy.marris.fr/indexasy/?filtre=arc triple
Mes configurations (le 24/02/21) :
PC n°1 :
Windows 10 - Asymptote(2.82)+MikTeX2.9 - Editeurs : Notepad++, TeXworks, Visual Studio Code.
PC n°2 :
Ubuntu 20.04LTS - Asymptote(2.67-?? git) + TexLive2020
Mon serveur :
Debian Stretch- Asymptote(2.68-16 git) + TexLive2018
Merci de préciser la votre !