Exemples de figures

Tout ce qui concerne le langage Asymptote. Ce langage est utilisable sur le forum via les balises asy.
[participation réservée aux utilisateurs inscrits]
Règles du forum
Merci de soigner la rédaction de vos messages et de consulter ce sujet avant de poster. Pensez également à utiliser la fonction recherche du forum.
MB
Administrateur
Administrateur
Messages : 8058
Inscription : samedi 28 mai 2005, 14:23
Statut actuel : Enseignant
Contact :

Message non lu par MB »

Une chose intéressante dans cette figure : la fonction format.

Code : Tout sélectionner

unitsize(1cm);
import geometry;

real a=5;
real b=7;
real c=28;
real d=7.5;

pair pO=(0,0);

path d1=pO--(d,0);
path d2=pO--(d,d*tan(c*pi/180));

pair pA=(a,0);
pair pC=(b,0);
pair pB=intersectionpoint(pA--(a,d),d2);
pair pD=intersectionpoint(pC--(b,d),d2);

draw(pA--pB^^pC--pD);
draw(d1^^d2);

perpendicular(pA,NW,blue);
perpendicular(pC,NW,blue);

draw(format("$%.0f^\circ$",c),arc(pA,pO,pB,1.2),blue);

label("$O$",pO,SW);
label("$A$",pA,S);
label("$C$",pC,S);
label("$B$",pB,N);
label("$D$",pD,N);

shipout(bbox(xmargin=2mm,invisible));
Pièces jointes
Figure3.png
(38.92 Kio) Téléchargé 2413 fois
MB. (rejoignez pCloud et bénéficiez de 10Go de stockage en ligne gratuits)
Pas d'aide en message privé. Merci de consulter ce sujet avant de poster votre premier message.
MB
Administrateur
Administrateur
Messages : 8058
Inscription : samedi 28 mai 2005, 14:23
Statut actuel : Enseignant
Contact :

Message non lu par MB »

Nouvelle figure : pattern et boucle for.

Code : Tout sélectionner

unitsize(1cm);
import patterns;

add("crosshatch",crosshatch(2mm,red));

real n=5;

fill((0,0)--(n,0)--(n,1)--(0,1)--cycle,pattern("crosshatch"));
fill((0,n-1)--(n,n-1)--(n,n)--(0,n)--cycle,pattern("crosshatch"));
fill((0,1)--(1,1)--(1,n-1)--(0,n-1)--cycle,pattern("crosshatch"));
fill((n-1,1)--(n,1)--(n,n-1)--(n-1,n-1)--cycle,pattern("crosshatch"));

for (int i=0; i <= n; ++i)
  {
     draw((0,i)--(n,i),gray);
     draw((i,0)--(i,n),gray); 
  }

shipout(bbox(xmargin=1mm,invisible));
Pièces jointes
Figure1.jpg
(61.81 Kio) Téléchargé 2296 fois
MB. (rejoignez pCloud et bénéficiez de 10Go de stockage en ligne gratuits)
Pas d'aide en message privé. Merci de consulter ce sujet avant de poster votre premier message.
MB
Administrateur
Administrateur
Messages : 8058
Inscription : samedi 28 mai 2005, 14:23
Statut actuel : Enseignant
Contact :

Message non lu par MB »

Nouvelle figure :

Code : Tout sélectionner

unitsize(1cm);
import geometry;

usepackage("mathrsfs"); 

real R1=7.5;
real R2=2.5;

pair pO=(0,0);
pair pA=(-R1,0);
pair pB=(R1,0);

dot(pO);
dot(pA);
dot(pB);

draw(pA--pB);

label("$A$",pA,W);
label("$B$",pB,E);
label("$O$",pO,SW);

pair pE=(R1-R2,0);
pair pN=(R1-2*R2,0);

dot(pE);
dot(pN);

label("$E$",pE,S);
label("$N$",pN,SW);

path C1=circle(pO,R1); 
path C2=circle(pE,R2); 

draw(Label("$\mathscr{C}_1$",Relative(.6)),C1,gray); 
draw(Label("$\mathscr{C}_2$",Relative(.6)),C2,gray);

path C3=circle(pB,4); 

pair pM=intersectionpoint(C2,C3);
pair pP=intersectionpoint(C1,pM--interp(pB,pM,5));

dot(pM);
dot(pP);

label("$M$",pM,NE+N);
label("$P$",pP,NE+N);

draw(pB--pP);
draw(pN--pM^^pA--pP);

pair pK=interp(pO,pP,-1);

dot(pK);

label("$K$",pK,SE+S);

draw(pP--pK);
draw(pA--pK^^pB--pK);

shipout(bbox(xmargin=1mm,invisible));
Pièces jointes
CFigure1.png
(130.5 Kio) Téléchargé 2254 fois
MB. (rejoignez pCloud et bénéficiez de 10Go de stockage en ligne gratuits)
Pas d'aide en message privé. Merci de consulter ce sujet avant de poster votre premier message.
MB
Administrateur
Administrateur
Messages : 8058
Inscription : samedi 28 mai 2005, 14:23
Statut actuel : Enseignant
Contact :

Message non lu par MB »

Suite à l'intégration du package markers (dû à Ph. Ivaldi d'ailleurs) dans les dernières version d'Asymptote, l'utilisation des marqueurs est bien plus simple (par rapport à cet exemple de figure par exemple). Le code est ainsi grandement simplifié.

Code : Tout sélectionner

unitsize(1cm);
import markers;
import geometry;

pair pA=(0,0);
pair pB=(3,0);
pair pC=(3,-3);
pair pD=(0,-3);
pair pE=(-4,-3);
pair pF=(0,5);
pair pG=(3+5,-3);
pair pH=(0,-3-4);

label("$A$",pA,NW);
label("$B$",pB,NE);
label("$C$",pC,SE);
label("$D$",pD,SW);
label("$E$",pE,W);
label("$F$",pF,N);
label("$G$",pG,E);
label("$H$",pH,S);

perpendicular(pA,NE,blue);
perpendicular(pC,NE,blue);
perpendicular(pD,SE,blue);
perpendicular(pD,NW,blue);

draw(pA--pB--pC--pD--cycle);

draw(pD--pE,StickIntervalMarker(1,1,size=6,angle=-45,red)); 
draw(pD--pH,StickIntervalMarker(1,1,size=6,angle=-45,red)); 
draw(pA--pE,StickIntervalMarker(1,2,size=6,angle=-45,red));
draw(pA--pF,StickIntervalMarker(1,2,size=6,angle=-45,red)); 
draw(pC--pH,StickIntervalMarker(1,2,size=6,angle=-45,red));
draw(pC--pG,StickIntervalMarker(1,2,size=6,angle=-45,red)); 
draw(pB--pF,StickIntervalMarker(1,3,size=6,angle=-45,red)); 
draw(pB--pG,StickIntervalMarker(1,3,size=6,angle=-45,red)); 

shipout(bbox(xmargin=1mm,invisible));
Pièces jointes
Figure3.png
(51.79 Kio) Téléchargé 2174 fois
MB. (rejoignez pCloud et bénéficiez de 10Go de stockage en ligne gratuits)
Pas d'aide en message privé. Merci de consulter ce sujet avant de poster votre premier message.
Nico
Modérateur honoraire
Modérateur honoraire
Messages : 616
Inscription : vendredi 24 juin 2005, 11:10
Localisation : Narbonne
Contact :

Message non lu par Nico »

Pas mal du tout....
Les label avec N, S, E, W, c'est bien trouvé....
Nico
Tarz at benec, kervorn denn Poulawenn!
Pas d'aide par MP.
rebouxo
Modérateur honoraire
Modérateur honoraire
Messages : 6962
Inscription : mercredi 15 février 2006, 13:18
Localisation : le havre
Contact :

Message non lu par rebouxo »

Il n'y a pas la possibilité de passer des options à plusieurs commandes ?
L'équivalent de \psset ?

Olivier
MB
Administrateur
Administrateur
Messages : 8058
Inscription : samedi 28 mai 2005, 14:23
Statut actuel : Enseignant
Contact :

Message non lu par MB »

rebouxo a écrit :Il n'y a pas la possibilité de passer des options à plusieurs commandes ?
L'équivalent de \psset ?
Si, ça doit être possible.
MB. (rejoignez pCloud et bénéficiez de 10Go de stockage en ligne gratuits)
Pas d'aide en message privé. Merci de consulter ce sujet avant de poster votre premier message.
OG
Modérateur spécialisé
Modérateur spécialisé
Messages : 2293
Inscription : lundi 12 mars 2007, 11:20
Localisation : Rouen

Message non lu par OG »

Bonjour

il y a peut-être d'autres solutions, on peut au moins faire cela

Code : Tout sélectionner

marker mark1=StickIntervalMarker(1,1,size=6,angle=-45,red);
marker mark2=StickIntervalMarker(1,2,size=6,angle=-45,red);
marker mark3=StickIntervalMarker(1,3,size=6,angle=-45,red);
draw(pD--pE,mark1);
draw(pD--pH,mark1);
draw(pA--pE,mark2);
draw(pA--pF,mark2);
draw(pC--pH,mark2);
draw(pC--pG,mark2);
draw(pB--pF,mark3);
draw(pB--pG,mark3);
Cordialement
O.G.
MB
Administrateur
Administrateur
Messages : 8058
Inscription : samedi 28 mai 2005, 14:23
Statut actuel : Enseignant
Contact :

Message non lu par MB »

Merci OG, c'est parfait non ? (pas besoin de chercher à faire autrement je pense) :D
MB. (rejoignez pCloud et bénéficiez de 10Go de stockage en ligne gratuits)
Pas d'aide en message privé. Merci de consulter ce sujet avant de poster votre premier message.
rebouxo
Modérateur honoraire
Modérateur honoraire
Messages : 6962
Inscription : mercredi 15 février 2006, 13:18
Localisation : le havre
Contact :

Message non lu par rebouxo »

Je vais finir par être conquis.

Olivier
MB
Administrateur
Administrateur
Messages : 8058
Inscription : samedi 28 mai 2005, 14:23
Statut actuel : Enseignant
Contact :

Message non lu par MB »

Nouvelle figure :

Code : Tout sélectionner

unitsize(0.75cm);
import markers; 

int xmax=7;
int xmin=-5;
int ymax=7;
int ymin=-4;

for (int i=1; i <= xmax; ++i)
  {
     draw((i,ymin)--(i,ymax),mediumgray);
  }
  
for (int i=xmin; i <= -1; ++i)
  {
     draw((i,ymin)--(i,ymax),mediumgray);
  }  

for (int j=1; j <= ymax; ++j)
  {
     draw((xmin,j)--(xmax,j),mediumgray);
  }
  
for (int j=ymin; j <= -1; ++j)
  {
     draw((xmin,j)--(xmax,j),mediumgray);
  }

draw((xmin,0)--(xmax,0),black,Arrow);
draw((0,ymin)--(0,ymax),black,Arrow);

dot(Label("$O$",align=SW),(0,0));
dot(Label("$I$",align=SE),(2,0));
dot(Label("$J$",align=NW),(0,2));

pair pA=(1,2)*2;
pair pB=(2.5,1)*2;
pair pC=(1.5,-1.5)*2;
pair pD=(0,-0.5)*2;
pair pE=(-1.5,1.5)*2;
pair pF=(-2,-1)*2;
pair pG=(-0.5,3)*2;
pair pH=(3,-1)*2;
pair pM=(-0.5,0.5)*2;

dot(Label("$A$",align=NE),pA);
dot(Label("$B$",align=NE),pB);
dot(Label("$C$",align=SE),pC);
dot(Label("$D$",align=SW),pD);
dot(Label("$E$",align=NW),pE);
dot(Label("$F$",align=SW),pF);
dot(Label("$G$",align=NW),pG);
dot(Label("$H$",align=SE),pH);
dot(Label("$M$",align=NW),pM);

draw(pA--pC,StickIntervalMarker(2,1,size=6,angle=-45,red));
draw(pD--pB,StickIntervalMarker(2,1,size=6,angle=-45,red));
draw(pE--pF,StickIntervalMarker(1,2,size=6,angle=-45,red));
draw(pE--pA,StickIntervalMarker(1,2,size=6,angle=-45,red));
draw(pA--pF,StickIntervalMarker(2,3,size=6,angle=-45,red));
draw(pA--pB--pC--pD--cycle);

shipout(bbox(xmargin=1mm,invisible));
Pièces jointes
CFigure1.png
(135.76 Kio) Téléchargé 2071 fois
MB. (rejoignez pCloud et bénéficiez de 10Go de stockage en ligne gratuits)
Pas d'aide en message privé. Merci de consulter ce sujet avant de poster votre premier message.
MB
Administrateur
Administrateur
Messages : 8058
Inscription : samedi 28 mai 2005, 14:23
Statut actuel : Enseignant
Contact :

Message non lu par MB »

Un cône :

Code : Tout sélectionner

unitsize(1cm);
import solids;
import math;

currentprojection=orthographic(0,100,25);

real r=4, h=7, hprime=4, rprime=r*hprime/h;

triple pO=(0,0,0);
triple pOprime=(0,0,3);
triple pS=(0,0,h);

triple pA=(r,0,0);
triple pAprime=(rprime,0,h-hprime);

revolution rC=cone(pO,r,h,Z);
revolution rCprime=cone(pOprime,rprime,hprime,Z);

label("$S$",pS,N); 
dot(Label("$O$",align=SE),pO);
dot(Label("$O'$",align=SE),pOprime);
dot(Label("$A$",align=W),pA);
dot(Label("$A'$",align=W),pAprime);

rC.draw();
rCprime.draw();

draw(pS--pO^^pO--pA^^pOprime--pAprime,dashed);

shipout(bbox(xmargin=1mm,invisible));
Par ailleurs, quelqu'un saurait comment hachurer (avec un fill et un pattern par exemple) la section de centre $O'$ assez simplement ?
Pièces jointes
Figure3.png
(100.47 Kio) Téléchargé 2062 fois
MB. (rejoignez pCloud et bénéficiez de 10Go de stockage en ligne gratuits)
Pas d'aide en message privé. Merci de consulter ce sujet avant de poster votre premier message.
OG
Modérateur spécialisé
Modérateur spécialisé
Messages : 2293
Inscription : lundi 12 mars 2007, 11:20
Localisation : Rouen

Message non lu par OG »

Bonjour

Jolies figures et merci pour tes commentaires sur mathematex et f.c.t.t.
As-tu regardé sur le site d'asymptote

http://asymptote.sourceforge.net/gallery/workcone.asy

et son pdf ?

Cordialement
O.G.
MB
Administrateur
Administrateur
Messages : 8058
Inscription : samedi 28 mai 2005, 14:23
Statut actuel : Enseignant
Contact :

Message non lu par MB »

OG a écrit :merci pour tes commentaires sur mathematex et f.c.t.t.
C'est normal.
OG a écrit : As-tu regardé sur le site d'asymptote

http://asymptote.sourceforge.net/gallery/workcone.asy

et son pdf ?
Oui, je viens de regarder, mais ça ne me donne pas la réponse à ma question. Il n'y a pas de remplissage d'une section de cône en fait.
On peut tracer un cercle et le remplir, mais je n'arrive pas à faire apparaitre les pointillés pour la section cachée.
MB. (rejoignez pCloud et bénéficiez de 10Go de stockage en ligne gratuits)
Pas d'aide en message privé. Merci de consulter ce sujet avant de poster votre premier message.
MB
Administrateur
Administrateur
Messages : 8058
Inscription : samedi 28 mai 2005, 14:23
Statut actuel : Enseignant
Contact :

Message non lu par MB »

J'ai trouvé une méthode permettant de hachurer cette fameuse section.
De plus, je n'utilise plus 2 cône pour tracer le contour de la section mais j'utilise la fonction transverse et un skeleton (ce qui me permet d'obtenir les pointillés alors qu'avec un simple cercle ça ne fonctionnait pas). J'utilise par contre un cercle et un simple fill (non draw) pour hachurer la section.

Code : Tout sélectionner

unitsize(1cm);
import solids;
import math;
import patterns;

add("crosshatch",crosshatch(2mm,red));

currentprojection=orthographic(0,100,25);

real r=4, h=7, hprime=4, rprime=r*hprime/h;

triple pO=(0,0,0);
triple pOprime=(0,0,3);
triple pS=(0,0,h);

triple pA=(r,0,0);
triple pAprime=(rprime,0,h-hprime);

revolution rC=cone(pO,r,h,Z);

skeleton s;
rC.transverse(s,reltime(rC.g,1-hprime/h));
rC.longitudinal(s);
draw(s.back,dashed);
draw(s.front);

fill(circle(pOprime,rprime),pattern("crosshatch"));

rC.draw();

label("$S$",pS,N); 
dot(Label("$O$",align=SE),pO);
dot(Label("$O'$",align=SE),pOprime);
dot(Label("$A$",align=W),pA);
dot(Label("$A'$",align=W),pAprime);

draw(pS--pO^^pO--pA^^pOprime--pAprime,dashed);

shipout(bbox(xmargin=1mm,invisible));
Pièces jointes
Figure3.png
(38.32 Kio) Téléchargé 2018 fois
MB. (rejoignez pCloud et bénéficiez de 10Go de stockage en ligne gratuits)
Pas d'aide en message privé. Merci de consulter ce sujet avant de poster votre premier message.
rebouxo
Modérateur honoraire
Modérateur honoraire
Messages : 6962
Inscription : mercredi 15 février 2006, 13:18
Localisation : le havre
Contact :

Message non lu par rebouxo »

B'soir.

J'ai passé ma journée sur la doc pourrie d'Asymptote. Manque d'exemple dans la doc et manque de commentaire dans les exemples. :x

Bon, voici mon code

Code : Tout sélectionner

import solids;

unitsize(1cm);

currentprojection=orthographic(0,100,25);

real r=2, R=2.5, h=0.5, H=1;

triple CB=(0,0,0);
triple CM=(0,0,H);
triple CH=(0,0,H+h);

revolution C=cylinder(CB,R,H,Z);
revolution c=cylinder(CM,r,h,Z);

C.filldraw(white,solid);
filldraw(circle(CM,R),white,black);
c.filldraw(white,solid,false);
filldraw(circle(CH,r),white,black);

triple D=(r,0,h+H);
triple G=(-r,0,h+H);

triple d=(r,0,h+H+1);
triple g=(-r,0,h+H+1);

draw(d--D);
draw(g--G);
draw(d--g,Arrows,Label("$d$",N));

shipout(bbox(xmargin=1mm,invisible));
Et voici l'image que j'ai.

Or je voudrais, un label entre au dessus des flèches, et que les parties latérales des cylindres soient blanches et non transparent.

Savez-vous comment faire ?

Olivier
Pièces jointes
cylindres.png
(3.83 Kio) Téléchargé 2001 fois
MB
Administrateur
Administrateur
Messages : 8058
Inscription : samedi 28 mai 2005, 14:23
Statut actuel : Enseignant
Contact :

Message non lu par MB »

Pour le label déjà :

Tu peux remplacer :

Code : Tout sélectionner

draw(d--g,Arrows,Label("$d$",N));
par :

Code : Tout sélectionner

draw("$d$",d--g,N,Arrows);
Sinon, c'est vrai que la documentation est un peu creuse.
J'ai pas encore bien compris l'usage du Label.
MB. (rejoignez pCloud et bénéficiez de 10Go de stockage en ligne gratuits)
Pas d'aide en message privé. Merci de consulter ce sujet avant de poster votre premier message.
rebouxo
Modérateur honoraire
Modérateur honoraire
Messages : 6962
Inscription : mercredi 15 février 2006, 13:18
Localisation : le havre
Contact :

Message non lu par rebouxo »

Merci MB.

Et pour le côté plein du cylindre, as-tu une idée ?


Olivier
MB
Administrateur
Administrateur
Messages : 8058
Inscription : samedi 28 mai 2005, 14:23
Statut actuel : Enseignant
Contact :

Message non lu par MB »

rebouxo a écrit :Et pour le côté plein du cylindre, as-tu une idée ?
Pour ça j'ai moins bien compris ce que tu souhaites faire.
De plus, les fill de solides sont un peu pénibles à maitriser au niveau des couleurs à cause des effets de lumière (qui me semblent imposés).

Je te propose le code suivant qui donne un résultat proche de celui que tu souhaitais (d'après ce que j'ai compris). Il n'y a pas de fill dans les cylindres en fait et j'utilise aussi un disque blanc au dessus pour cacher les parties non visibles.

Il reste encore deux petites parties qui ne sont pas cachées du fait que je ne fill pas la surface latérale du cylindre (à cause de ces problèmes de lumière). Je vais continuer à regarder, mais tu peux déjà me dire si c'est bien ce que tu veux.

Code : Tout sélectionner

import solids;
unitsize(1cm);

currentprojection=orthographic(0,100,25);

real r=2, R=2.5, h=0.5, H=1;

triple CB=(0,0,0);
triple CM=(0,0,H);
triple CH=(0,0,H+h);

revolution C=cylinder(CB,R,H,Z);
revolution c=cylinder(CM,r,h,Z);

C.draw(backpen=white);
c.draw(backpen=white);
filldraw(circle(CH,r),white,black);

triple D=(r,0,h+H);
triple G=(-r,0,h+H);

triple d=(r,0,h+H+1);
triple g=(-r,0,h+H+1);

draw(d--D,dotted);
draw(g--G,dotted);
draw("$d$",d--g,N,Arrows);

shipout(bbox(xmargin=1mm,invisible));
Pièces jointes
rebouxo_1.png
(23.89 Kio) Téléchargé 1965 fois
MB. (rejoignez pCloud et bénéficiez de 10Go de stockage en ligne gratuits)
Pas d'aide en message privé. Merci de consulter ce sujet avant de poster votre premier message.
rebouxo
Modérateur honoraire
Modérateur honoraire
Messages : 6962
Inscription : mercredi 15 février 2006, 13:18
Localisation : le havre
Contact :

Message non lu par rebouxo »

Nickel. Je me suis bien exprimé alors :D .
Il y a juste un tout p'tit truc qui me chiffonne, on voit le cylindre du dessous, en bas du cylindre du haut (heu, là c'est pas clair).
Olivier
Verrouillé
  • Sujets similaires
    Réponses
    Vues
    Dernier message