Cotes d'une figure 3D

Tout ce qui concerne l'utilisation ou l'installation d'Asymptote.

Modérateur: gdm_asy

Règles du forum
Merci d'éviter le style SMS dans vos messages et de penser à utiliser la fonction Recherche avant de poster un message. Pour joindre des fichiers à vos messages, consulter ce sujet.
> Penser à utiliser les balises Code pour poster du code.

Cotes d'une figure 3D

Messagepar Fabrice Couvreur » Vendredi 25 Février 2011, 18:15

Bonjour,
Dans le code ci-dessous :

Code: Tout sélectionner
import three;
import geometry;
usepackage("fourier");
settings.outformat="pdf";
settings.prc=false;
settings.render=4;
size(10cm);
currentprojection=obliqueX;
currentlight=nolight;
pen p=fontsize(6pt);
real a=12;
real b=9;
triple tA=(0,0,0),tB=(0,b,0),tC=(-b,b,0),tD=(-b,0,0),tS=(0,0,a),tE=(0,0,b);
triple tF=shift(0,b/4,0)*tE;
triple tG=shift((tC-tB)/4)*tF;
triple tH=shift((tD-tC)/4)*tG;
draw(surface(tA--tB--tS--cycle),lightred+opacity(0.5),black+0.5bp);
draw(surface(tB--tC--tS--cycle),lightred+opacity(0.5),black+0.5bp);
draw(surface(tD--tC--tS--cycle),lightred+opacity(0.5));
draw(surface(tD--tA--tS--cycle),lightred+opacity(0.5));
draw(tA--tD--tC^^tD--tS,dashed);
draw(tE--tF^^tF--tG,black+0.5bp);
draw(tG--tH--tE,dashed);
label("A",tA,S,p);
label("B",tB,S,p);
label("C",tC,S+E,p);
label("S",tS,N,p);
label("D",tD,S+E,p);
label("E",tE,S+W,p);
label("F",tF,S+3E,p);
label("G",tG,N+E,p);
label("H",tH,N+2W,p);
label("$9\,\textrm{cm}$",(tA+tB)/2,S,p);


je souhaiterais marquer la longueur AB avec un segment ayant une flèche à chaque extrémité et un label égal à "9 cm".
Peut-on utiliser la routine distance() du module geometry en considérant, par exemple, les projetés des points A et B sur le plan de la feuille ?
Merci.
Dernière édition par Fabrice Couvreur le Vendredi 25 Février 2011, 23:30, édité 1 fois.
Fabrice Couvreur
Giga-utilisateur
 
Messages: 598
Inscription: Samedi 18 Août 2007, 00:55

Publicité

Re: Cotes d'une figure 3D.

Messagepar chellier » Vendredi 25 Février 2011, 19:38

Fabrice Couvreur a écrit:je souhaiterais marquer la longueur AB avec un segment ayant une flèche à chaque extrémité et un label égal à "12 cm".
Peut-on utiliser la routine distance() du module geometry en considérant, par exemple, les projetés des points A et B sur le plan de la feuille ?
Merci.

Bonjour,

Avec distance, je ne pense pas que ce soit faisable, mais je veux bien être contredit :D

Par contre, comme je le dis dans les annexes de ma doc (troisième lien de ma signature), on peut créer une fonction pour le faire. :
Code: Tout sélectionner
import three;
//import geometry;
usepackage("fourier");
settings.outformat="pdf";
settings.prc=false;
settings.render=4;
size(10cm,0);
currentprojection=obliqueX;
currentlight=nolight;
pen p=fontsize(6pt);
//==========================================
void cote3D(picture pic=currentpicture,
Label L="", triple A, triple B,
real d=5mm, triple v, bool cc=true,
pen p=currentpen, pen joinpen=dotted,
arrowbar3 arrow=Arrows3)
{
transform3 T=shift(d*unit(v));
triple A=A, B=B;
pic.add(new void(picture f, transform3 t) {
picture opic;
path3 dist;
triple Ap=t*A, Bp=t*B;
triple a=T*Ap, b=T*Bp;
if (cc) {dist=a--b;}
else {dist=b--a;}
draw(opic,L,dist,p,arrow);
draw(opic,a--Ap^^b--Bp,joinpen);
add(f,opic);
}, true);
}
//==========================================
real a=12;
real b=9;
triple tA=(0,0,0),tB=(0,b,0),tC=(-b,b,0),tD=(-b,0,0),tS=(0,0,a),tE=(0,0,b);
triple tF=shift(0,b/4,0)*tE;
triple tG=shift((tC-tB)/4)*tF;
triple tH=shift((tD-tC)/4)*tG;
draw(surface(tA--tB--tS--cycle),lightred+opacity(0.5),black+0.5bp);
draw(surface(tB--tC--tS--cycle),lightred+opacity(0.5),black+0.5bp);
draw(surface(tD--tC--tS--cycle),lightred+opacity(0.5));
draw(surface(tD--tA--tS--cycle),lightred+opacity(0.5));
draw(tA--tD--tC^^tD--tS,dashed);
draw(tE--tF^^tF--tG,black+0.5bp);
draw(tG--tH--tE,dashed);
label("A",tA,S,p);
label("B",tB,S,p);
label("C",tC,S+E,p);
label("S",tS,N,p);
label("D",tD,S+E,p);
label("E",tE,S+W,p);
label("F",tF,S+3E,p);
label("G",tG,N+E,p);
label("H",tH,N+2W,p);
//label("$9\,\textrm{cm}$",(tA+tB)/2,S,p);
//==========================================
cote3D(Label("$9\,\textrm{cm}$",p),tA,tB,-Z);

project_1.png
project_1.png (69.7 Kio) Vu 762 fois

Dans les annexes de la doc, tu trouveras aussi (entre autres) comment définir une vraie perspective cavalière :
project.png
project.png (73.09 Kio) Vu 762 fois

Christophe

PS : une dernière remarque : plutôt que de définir pen p=fontsize(6pt); et d'être obligé de spécifier "p" dans tous les labels, on peut aussi utiliser defaultpen(fontsize(6pt));
chellier
Modérateur
 
Messages: 355
Inscription: Samedi 25 Juillet 2009, 11:25
Localisation: Le Creusot
Statut actuel: Actif et salarié | Enseignant

Re: Cotes d'une figure 3D.

Messagepar Fabrice Couvreur » Samedi 26 Février 2011, 00:15

Bonsoir Christophe,
J'avais parcouru ta documentation (beau boulot !), mais j'aimais bien la forme des flèches de la structure distance().
Je vais donc utiliser tes routines.
Merci.
Fabrice Couvreur
Giga-utilisateur
 
Messages: 598
Inscription: Samedi 18 Août 2007, 00:55

Re: Cotes d'une figure 3D.

Messagepar GMaths » Samedi 26 Février 2011, 01:03

chellier a écrit:Avec distance, je ne pense pas que ce soit faisable, mais je veux bien être contredit :D


Bon, bein alors... je vais contredire.

Ceci fonctionne...

Code: Tout sélectionner
distance("$9\,\textrm{cm}$",project(tA),project(tB),rotated=false,8mm,joinpen=red+linetype("4 4"));

... mais, comme d'hab, quand on veut mettre des commandes 2D dans une scène 3D, sous réserve de mettre settings.render=0.
GMaths
Exa-utilisateur
 
Messages: 2031
Inscription: Lundi 01 Octobre 2007, 09:20
Statut actuel: Actif et salarié | Enseignant

Re: Cotes d'une figure 3D.

Messagepar chellier » Samedi 26 Février 2011, 10:02

GMaths a écrit:Bon, bein alors... je vais contredire.

Avec plaisir :wink:

GMaths a écrit:... mais, comme d'hab, quand on veut mettre des commandes 2D dans une scène 3D, sous réserve de mettre settings.render=0.

Ah... c'était ça ! Merci Gaétan.

@ Fabrice : dans cote3D, on peut choisir le style des flèches :
Code: Tout sélectionner
cote3D("$9\,\textrm{cm}$",tA,tB,-Z,Arrows3(HookHead3,1mm));

Mais ça restera des flèches "3D". La solution de Gaétan te conviendra peut-être mieux.

Christophe
chellier
Modérateur
 
Messages: 355
Inscription: Samedi 25 Juillet 2009, 11:25
Localisation: Le Creusot
Statut actuel: Actif et salarié | Enseignant


Retourner vers Asymptote

 


  • Articles en relation
    Réponses
    Vus
    Dernier message

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité