En dessinant avec TikZ en trois dimensions, comment spécifier un point de vue ?

L'ECM ci-dessous figure trois rectangles :

  • un dans le plan XY,
  • le deuxième dans le plan XZ,
  • le dernier dans le plan YZ.

Comment indiquer à TikZ de figurer ces rectangles comme vus depuis le point de coordonnées (8, 5, -3) ?

Ouvrir dans l'éditeur Overleaf
\documentclass[border = 8 mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{3d}
\begin{document}
\begin{tikzpicture}
  % base XY
  \draw[fill = red] (0, 0, 0) -- (5, 0, 0) -- (5, 3, 0) -- (0, 3, 0) -- cycle ;
  % face XZ
  \draw (0, 0, 0) -- (5, 0, 0) -- (5, 0, 2) -- (0, 0, 2) -- cycle ;
  % côté YZ
  \draw (0, 0, 0) -- (0, 3, 0) -- (0, 3, 2) -- (0, 0, 2) -- cycle ;
\end{tikzpicture}
\end{document}

Posée 02 Mar, 20:49

Pathe's gravatar image

Pathe ♦♦
5.6k165162
Taux d'acceptation : 59%

Si vous avez besoins de plus d'exemples de la bibliothèque 3d: https://github.com/samcarter/Extravanganza2018/blob/master/marmot/ce_mole.tex

(02 Mar, 22:05) samcarter samcarter's gravatar image

Vous pouvez changer la définition des vecteurs d'unité pour changer votre point de vue. Par défaut z est (-3.85mm, -3.85mm). Pour voir votre image de derrière, essayez (3.85mm, 3.85mm) etc.

L’image suivante n’est pas exactement comme vu de (8, 5, -3) mais j'assume que l’on pourrait calculer la valeur nécessaire...

Ouvrir dans l'éditeur Overleaf
\documentclass[border = 8 mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{3d}
\begin{document}
\begin{tikzpicture}[x={(1cm,0cm)}, y={(0cm,1cm)}, z={(10mm, 10mm)}]% default z value: (-3.85mm, -3.85mm)
  % base XY
  \draw[fill = red] (0, 0, 0) -- (5, 0, 0) -- (5, 3, 0) -- (0, 3, 0) -- cycle ;
  % face XZ
  \draw (0, 0, 0) -- (5, 0, 0) -- (5, 0, 2) -- (0, 0, 2) -- cycle ;
  % côté YZ
  \draw (0, 0, 0) -- (0, 3, 0) -- (0, 3, 2) -- (0, 0, 2) -- cycle ;

    \node at (0, 0, 0) {0,0,0}; 
    \node at (5, 3, 0) {5,3,0};

        \node at (8, 5, -3) {8, 5, -3}; 
\end{tikzpicture}
\end{document}

Le même avec la bibliothèque 3d :

Ouvrir dans l'éditeur Overleaf
\documentclass[border = 8 mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{3d}
\begin{document}
\begin{tikzpicture}[x={(1cm,0cm)}, y={(0cm,1cm)}, z={(3.85mm, 3.85mm)}]% default z value: (-3.85mm, -3.85mm)
  % base XY
  \begin{scope}[canvas is xy plane at z=0]
    \draw[fill = red] (0, 0) rectangle (5, 3);
  \end{scope}
  % face XZ
    \begin{scope}[canvas is xz plane at y=0]
        \draw (0, 0) rectangle (5, 2);
    \end{scope}
  % côté YZ
    \begin{scope}[canvas is yz plane at x=0]
        \draw (0, 0
        ) rectangle (3, 2);
    \end{scope}  
\end{tikzpicture}
\end{document}

alt text

Un autre exemple de la documentation de tikz "40.3 Examples". Changez le -35 dans x={(-35:5mm)} pour choisir l'angle :

Ouvrir dans l'éditeur Overleaf
\documentclass[border = 8 mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{3d}
\begin{document}
\begin{tikzpicture}[z={(10:10mm)},x={(-35:5mm)}] \def\wave{
\draw[fill,thick,fill opacity=.2]
(0,0) sin (1,1) cos (2,0) sin (3,-1) cos (4,0)
           sin (5,1) cos (6,0) sin (7,-1) cos (8,0)
           sin (9,1) cos (10,0)sin (11,-1)cos (12,0);
    \foreach \shift in {0,4,8}
{
\begin{scope}[xshift=\shift cm,thin]
        \draw (.5,0)  -- (0.5,0 |- 45:1cm);
        \draw (1,0)   -- (1,1);
        \draw (1.5,0) -- (1.5,0 |- 45:1cm);
        \draw (2.5,0) -- (2.5,0 |- -45:1cm);
        \draw (3,0)   -- (3,-1);
        \draw (3.5,0) -- (3.5,0 |- -45:1cm);
      \end{scope}
} }
\begin{scope}[canvas is zy plane at x=0,fill=blue] \wave
\node at (6,-1.5) [transform shape] {magnetic field}; \end{scope}
\begin{scope}[canvas is zx plane at y=0,fill=red]
\draw[help lines] (0,-2) grid (12,2);
\wave
\node at (6,1.5) [rotate=180,xscale=-1,transform shape] {electric field};
  \end{scope}
\end{tikzpicture}
\end{document}

alt text

Lien permanent

Publiée 02 Mar, 22:01

samcarter's gravatar image

samcarter
2.8k211
Taux d'acceptation : 47%

Modifiée 02 Mar, 23:10

Ces explications, claires et détaillées, me sont d'une grande utilité. On remarquera qu'à la différence de la documentation, qui reste à traduire, elles ont le bon goût d'être rédigées dans la langue de Molière. 😉

(02 Mar, 22:28) Pathe ♦♦ Pathe's gravatar image

@Pathe Merci pour vos mots gentils! Maintenant, je me demande si Molière aurait aimé écrire ses comédies avec latex ...

(02 Mar, 22:57) samcarter samcarter's gravatar image
Votre réponse
(dés)activer 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

Bases de Markdown

  • *italique* ou _italique_
  • **gras** ou __gras__
  • Lien ::[texte](http://url.com/ "Titre ")
  • Image : ?![alt texte](/path/img.jpg "Titre ")
  • Liste numérotée : 1. Foo 2. Bar
  • Pour ajouter un passage à la ligne, ajoutez deux espaces à l'endroit où vous souhaitez que la ligne commence.
  • Les balises HTML de base sont également prises en charge.

Mots-clés de la question :

×64
×6

Question posée : 02 Mar, 20:49

Question vue : 584 fois

Dernière mise à jour : 02 Mar, 23:10