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);
 
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

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é}%
\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}
 
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

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.

Posée 18 Sep '22, 17:00

GBourri%C3%A9's gravatar image

GBourrié
4113
Taux d'acceptation : 0%

Modifiée 18 Sep '22, 17:10

Pathe's gravatar image

Pathe ♦♦
7.6k49208252

@GBourrié - les formules de politesse et les signatures sont à éviter : celles de votre contribution ont été supprimées.

(18 Sep '22, 17:07) Pathe ♦♦ Pathe's gravatar image

@GBourrié : il serait peut-être utile de placer votre code MetaPost dans un environnement mplibcode (fourni par le package luamplib), de manière à ce qu'il soit compilable en ligne.

(18 Sep '22, 17:23) Pathe ♦♦ Pathe's gravatar image

Bienvenue sur TeXnique.fr !

(18 Sep '22, 17:28) denis ♦♦ denis's gravatar image

Je pense qu'il faut utiliser def_visual_inter_ plutôt que def_visual_inter. Et sur les noms des points plutôt que sur les projections. En ne gardant que les octaèdres, ça donnerait un truc comme ça :

\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;
 
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

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 3dpoly.mp et la modifier pour changer les couleurs notamment ou les supprimer. Sans modification, ça donne ça :

\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}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Lien permanent

Publiée 22 Sep '22, 17:29

logamath's gravatar image

logamath
52316
Taux d'acceptation : 30%

1

Merci beaucoup, c'est super !

(28 Sep '22, 12:04) GBourrié GBourri%C3%A9's gravatar image
Votre réponse
[Masquer l'aperçu]

Suivre cette question

Par courriel :

Une fois que vous serez enregistré, vous pourrez souscrire à n'importe quelle mise à jour ici

Par flux RSS :

Réponses

Réponses et commentaires

Mots-clés de la question :

×8
×8

Question posée : 18 Sep '22, 17:00

Question vue : 2,374 fois

Dernière mise à jour : 28 Sep '22, 13:23

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

×