Historique des modifications [retour]
cliquez ici pour masquer/afficher la révision 3
titre et data perso

18 Sep '22, 17:10

Pathe's gravatar image

Pathe
7.6k49209252

Comment cacher des arêtes non vues en perspective 3D avec MetapostMetaPost

Ci-dessous un fichier pour dessiner deux octaèdres partageant une arête commune : verbatimtex %&latex \documentclass{article} \usepackage{mathpple} \usepackage{mhchem} \usepackage{xcolor} \begin{document} etex input 3danim input 3dgeom output_res:=72; drawing_scale:=40cm; path a, pa, pb; pair y; %set_plane_(projection_plane)(point_null,vec_I,vec_J); set_plane_(projection_plane)(point_null,vec_I,vec_K); new_plane_(horizontal_plane)(point_null,vec_I,vec_J); new_points(vertex)(12); % Tétraèdre régulier set_point_(vertex1)(0,0,0); % Origine O set_point_(vertex2)(1,0,0); % A set_point_(vertex3)(0,1,0); % B set_point_(vertex4)(-1,0,0); % C set_point_(vertex5)(0,-1,0); % D set_point_(vertex6)(0,0,1); % E set_point_(vertex7)(0,0,-1); % F set_point_(vertex8)(-1,2,0); % G set_point_(vertex9)(-2,1,0); % H set_point_(vertex10)(-1,1,1); % I set_point_(vertex11)(-1,1,-1); % J set_point_(vertex12)(-1,1,0); % K % Observateur i:=5; %for i:=0 upto 10: \beginfig(100+i) set_point_(Obs)(20*cosd(3.6*i),20*sind(3.6*i),6); Obs_phi:=90; Obs_dist:=2; point_of_view_abs(vertex1,Obs_phi); % Projections for j:=1 upto 12: project_point(j,vertex[j]); endfor; % Lines % détermine les points d'intersection visuels où une arête cache une autre %boolean b, c; %b:=def_visual_inter(i)(z4,z10,z3,z6); %set_point_(vertex13)(i); %c:=def_visual_inter(j)(z4,z11,z3,z7); %set_point_(vertex13)(j); draw z2--z3--z6--z2--cycle; draw z2--z7--z5--z2--cycle; draw z7--z3; draw z5--z6; draw z10 -- z3; draw z3 --z11 -- z8 -- z3 -- cycle; draw z8 -- z10 -- z4; draw z4 -- z11 -- z3; drawoptions(dashed evenly); draw z2--z4--z6; draw z5--z3;draw z5--z4--z3 -- z9; draw z6--z7--z4; draw z8 -- z9 -- z4 -- z8 -- cycle; draw z11 -- z 10 -- z9 -- z11 --cycle; drawoptions(); % dessine un cercle rouge pour l'atome de Fe2+ pickup pencircle scaled 1pt; a = fullcircle scaled 5 mm; fill a withcolor .7 red; draw a; % dessine les molécules d'eau d'hydratation for i:= 1 upto 11: pa:=a shifted z[i]; draw pa; endfor; % dessine un cercle orange pour l'atome de Mg2+ pb:=fullcircle scaled 5 mm shifted z12; fill pb withcolor .7 green; draw pb; % colorie en bleu les OH pontants a:= fullcircle scaled 5 mm; for i:= 3 upto 4: pa:=a shifted z[i]; fill pa withcolor .7 blue; draw pa; endfor; % trace le double pont OH pickup pencircle scaled 4pt; drawoptions(dashed evenly scaled 4); draw z1 -- z4 -- z12 -- z3 -- z1 -- cycle; %label.top(btex \ce{H2O} etex,z6); %label.rt(btex \ce{Fe^{2+}} etex,z1); %label.rt(btex \ce{OH} etex,z4); %label.rt(btex \ce{OH} etex,z3); %label.rt(btex \ce{Mg^{2+}} etex,z12); label.rt(btex C etex,z4); % label.bot(btex F etex,z7); % % label.rt(btex G etex,z8); % label.urt(btex H etex,z9); label.top(btex I etex,z10); label.bot(btex J etex,z11); endfig; %endfor; free_points(vertex)(12); end. et le fichier `.tex` de visualisation : % fig.tex fichier pour test d'une figure créée sous Metapost par % fig.mp ou sous Tikz \documentclass[12pt,a4paper]{article} \usepackage[dvips]{graphicx}% \DeclareGraphicsRule{*}{mps}{*}{} \usepackage[OT1]{fontenc} \usepackage[ansinew]{inputenc} \usepackage{times} \usepackage[french,english]{babel} \usepackage{amsmath} \usepackage{amssymb} \usepackage[normalem,normalbf]{ulem} %pour le soulignement \usepackage{fancyhdr} \usepackage{siunitx} \title{} % \author{G. Bourrié\footnote{\small\textrm{% Institut National de la Recherche Agronomique\\ Géochimie des Sols et des Eaux\\ BP 80 - F13545 Aix-en-Provence cedex 04 France\\ Tél.: +33 4 42 90 85 41 Fax~: + 33 4 42 90 85 17 E-mail: bourrie@aix.inra.fr}\hfil}}% Bourrié}% \date{} % % \graphicspath{{figures/}} % chemin d'accès des figures \normalsize \lhead{} \chead{} \rhead{} \renewcommand{\headrulewidth}{0pt} \lfoot{} \cfoot{} \rfoot{} \begin{document} \selectlanguage{french} \thispagestyle{fancy} \enlargethispage{-\baselineskip} \begin{figure} \centering \begin{tabular}{cccc} \includegraphics[scale=1]{heterodimere.105} & \end{tabular} % remplacer fig par le nom du fichier figure \caption{Deux octaèdres réguliers partageant une arête commune} \end{figure} \end{document} Denis Roegel donne une méthode pour calculer l'intersection visuelle entre un plan et une arête. Je n'arrive pas à utiliser cette méthode. En l'occurrence, une partie des segments *CJ* et *CI* devrait être en pointillés, C étant le sommet de l'octaèdre en bleu, en arrière du plan de la figure, *I* et *J* les sommets de l'octaèdre de droite en haut et en bas. Comment faire ? Je n'arrive pas non plus à utiliser la fonction `assign_obj` et l'instanciation de classe avec les instructions pour octaèdres et j'ai donc repris l'écriture à partir des instructions de base de `MetaPost`.
cliquez ici pour masquer/afficher la révision 2
présentation

18 Sep '22, 17:05

Pathe's gravatar image

Pathe
7.6k49209252

Comment cacher des arêtes non vues en perspective 3D avec Metapost

Bonjour à tous, ci-joint Ci-dessous un fichier pour dessiner deux octaèdres partageant une arête commune. commune : verbatimtex %&latex \documentclass{article} \usepackage{mathpple} \usepackage{mhchem} \usepackage{xcolor} \begin{document} etex input 3danim input 3dgeom output_res:=72; drawing_scale:=40cm; path a, pa, pb; pair y; %set_plane_(projection_plane)(point_null,vec_I,vec_J); set_plane_(projection_plane)(point_null,vec_I,vec_K); new_plane_(horizontal_plane)(point_null,vec_I,vec_J); new_points(vertex)(12); % Tétraèdre régulier set_point_(vertex1)(0,0,0); % Origine O set_point_(vertex2)(1,0,0); % A set_point_(vertex3)(0,1,0); % B set_point_(vertex4)(-1,0,0); % C set_point_(vertex5)(0,-1,0); % D set_point_(vertex6)(0,0,1); % E set_point_(vertex7)(0,0,-1); % F set_point_(vertex8)(-1,2,0); % G set_point_(vertex9)(-2,1,0); % H set_point_(vertex10)(-1,1,1); % I set_point_(vertex11)(-1,1,-1); % J set_point_(vertex12)(-1,1,0); % K % Observateur i:=5; %for i:=0 upto 10: \beginfig(100+i) set_point_(Obs)(20*cosd(3.6*i),20*sind(3.6*i),6); Obs_phi:=90; Obs_dist:=2; point_of_view_abs(vertex1,Obs_phi); % Projections for j:=1 upto 12: project_point(j,vertex[j]); endfor; % Lines % détermine les points d'intersection visuels où une arête cache une autre %boolean b, c; %b:=def_visual_inter(i)(z4,z10,z3,z6); %set_point_(vertex13)(i); %c:=def_visual_inter(j)(z4,z11,z3,z7); %set_point_(vertex13)(j); draw z2--z3--z6--z2--cycle; draw z2--z7--z5--z2--cycle; draw z7--z3; draw z5--z6; draw z10 -- z3; draw z3 --z11 -- z8 -- z3 -- cycle; draw z8 -- z10 -- z4; draw z4 -- z11 -- z3; drawoptions(dashed evenly); draw z2--z4--z6; draw z5--z3;draw z5--z4--z3 -- z9; draw z6--z7--z4; draw z8 -- z9 -- z4 -- z8 -- cycle; draw z11 -- z 10 -- z9 -- z11 --cycle; drawoptions(); % dessine un cercle rouge pour l'atome de Fe2+ pickup pencircle scaled 1pt; a = fullcircle scaled 5 mm; fill a withcolor .7 red; draw a; % dessine les molécules d'eau d'hydratation for i:= 1 upto 11: pa:=a shifted z[i]; draw pa; endfor; % dessine un cercle orange pour l'atome de Mg2+ pb:=fullcircle scaled 5 mm shifted z12; fill pb withcolor .7 green; draw pb; % colorie en bleu les OH pontants a:= fullcircle scaled 5 mm; for i:= 3 upto 4: pa:=a shifted z[i]; fill pa withcolor .7 blue; draw pa; endfor; % trace le double pont OH pickup pencircle scaled 4pt; drawoptions(dashed evenly scaled 4); draw z1 -- z4 -- z12 -- z3 -- z1 -- cycle; %label.top(btex \ce{H2O} etex,z6); %label.rt(btex \ce{Fe^{2+}} etex,z1); %label.rt(btex \ce{OH} etex,z4); %label.rt(btex \ce{OH} etex,z3); %label.rt(btex \ce{Mg^{2+}} etex,z12); label.rt(btex C etex,z4); % label.bot(btex F etex,z7); % % label.rt(btex G etex,z8); % label.urt(btex H etex,z9); label.top(btex I etex,z10); label.bot(btex J etex,z11); endfig; %endfor; free_points(vertex)(12); end. et le fichier .tex `.tex` de visualisation : % fig.tex fichier pour test d'une figure créée sous Metapost par % fig.mp ou sous Tikz \documentclass[12pt,a4paper]{article} \usepackage[dvips]{graphicx}% \DeclareGraphicsRule{*}{mps}{*}{} \usepackage[OT1]{fontenc} \usepackage[ansinew]{inputenc} \usepackage{times} \usepackage[french,english]{babel} \usepackage{amsmath} \usepackage{amssymb} \usepackage[normalem,normalbf]{ulem} %pour le soulignement \usepackage{fancyhdr} \usepackage{siunitx} \title{} % \author{G. Bourrié\footnote{\small\textrm{% Institut National de la Recherche Agronomique\\ Géochimie des Sols et des Eaux\\ BP 80 - F13545 Aix-en-Provence cedex 04 France\\ Tél.: +33 4 42 90 85 41 Fax~: + 33 4 42 90 85 17 E-mail: bourrie@aix.inra.fr}\hfil}}% \date{} % % \graphicspath{{figures/}} % chemin d'accès des figures \normalsize \lhead{} \chead{} \rhead{} \renewcommand{\headrulewidth}{0pt} \lfoot{} \cfoot{} \rfoot{} \begin{document} \selectlanguage{french} \thispagestyle{fancy} \enlargethispage{-\baselineskip} \begin{figure} \centering \begin{tabular}{cccc} \includegraphics[scale=1]{heterodimere.105} & \end{tabular} % remplacer fig par le nom du fichier figure \caption{Deux octaèdres réguliers partageant une arête commune} \end{figure} \end{document} Denis Roegel donne une méthode pour calculer l'intersection visuelle entre un plan et une arête. Je n'arrive pas à utiliser cette méthode. En l'occurrence, une partie des segments CJ *CJ* et CI *CI* devrait être en pointillés, C étant le sommet de l'octaèdre en bleu, en arrière du plan de la figure, I *I* et J *J* les sommets de l'octaèdre de droite en haut et en bas. Comment faire ? Je n'arrive pas non plus à utiliser la fonction assign_obj `assign_obj` et l'instanciation de classe avec les instructions pour octaèdres et j'ai donc repris l'écriture à partir des instructions de base de MetaPost. Bien cordialement, Guilhem Bourrié`MetaPost`.
cliquez ici pour masquer/afficher la révision 1

18 Sep '22, 17:00

GBourri%C3%A9's gravatar image

GBourrié
4113

C'est votre première visite ici ? Consultez la FAQ !

×