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 % 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é}% \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 |
Je pense qu'il faut utiliser \documentclass{standalone} \usepackage{luamplib} \everymplib{input 3dgeom;} \begin{document} \begin{mplibcode} output_res:=72; drawing_scale:=40cm; path a, pa, pb; pair y; new_points(vertex)(14); 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); % Lines % détermine les points d'intersection visuels où une arête cache une autre boolean b, c; b:=def_visual_inter_(vertex13)(vertex4,vertex10,vertex3,vertex6); c:=def_visual_inter_(vertex14)(vertex4,vertex11,vertex3,vertex7); % Projections for j:=1 upto 14: project_point(j,vertex[j]); endfor; draw z6--z3--z2--z7--z3; draw z7--z5--z6--z2--z5; draw z3--z8--z10--z3--z11--z8; draw z10--z13;draw z11--z14; % Les parties apparentes drawoptions(dashed evenly); draw z13--z4;draw z14--z4; % Les parties cachées draw z3--z4--z5; draw z6--z4--z7; draw z8--z9--z4 ; draw z10--z9--z11; endfig; %endfor; free_points(vertex)(14); \end{mplibcode} \end{document} Pour utiliser les classes, c'est vrai que ça a l'air compliqué, je suppose qu'on peut partir de la définition de octahedron dans \documentclass{standalone} \usepackage{luamplib} \everymplib{input 3dgeom; input 3dpoly; } \begin{document} \begin{mplibcode} assign_obj("octa","octahedron"); new_point(origine); set_point_(origine)(0,0,0); beginfig(1); set_point_(Obs)(15,8,6); Obs_phi:=90; Obs_dist:=10; point_of_view_abs(origine,Obs_phi); draw_obj("octa"); endfig; free_point(origine); \end{mplibcode} \end{document} Publiée 22 Sep '22, 17:29 logamath |
@GBourrié - les formules de politesse et les signatures sont à éviter : celles de votre contribution ont été supprimées.
@GBourrié : il serait peut-être utile de placer votre code MetaPost dans un environnement
mplibcode
(fourni par le packageluamplib
), de manière à ce qu'il soit compilable en ligne.Bienvenue sur TeXnique.fr !