
Ich habe einen einfachen Würfel im 3-Raum-Format, 4 Flächen in Rot und Ober- und Unterseite in Grün gezeichnet.
\documentclass[border=5,tikz]{standalone}
\usepackage{tikz-3dplot}
\begin{document}
\foreach\s in{2,4,...,360}{
\tdplotsetmaincoords{2.71828+\s}{2.71828+\s*2}
\tikz[tdplot_main_coords,scale=.1]{
\path(-15cm,-15cm)(15cm,15cm);
\draw[ultra thick, color=black, fill=green!80!black]
(0,0,0)--(20,0,0)--(20,20,0)--(0,20,0)--cycle % bottom
(0,0,20)--(20,0,20)--(20,20,20)--(0,20,20)--cycle; % top
\draw[ultra thick, color=black, fill=red!80!black]
(0,0,0)--(20,0,0)--(20,0,20)--(0,0,20)--cycle
(0,20,0)--(20,20,0)--(20,20,20)--(0,20,20)--cycle
(0,0,0)--(0,20,0)--(0,20,20)--(0,0,20)--cycle
(20,0,0)--(20,20,0)--(20,20,20)--(20,0,20)--cycle;
}
}
\end{document}
die aus bestimmten Winkeln in TikZ betrachtet eine unerwartete Projektion zeigen. Es scheint, als würden bestimmte Flächen transparent, wenn sie übereinander gelegt werden!
Handelt es sich hierbei um einen Fehler oder stimmt etwas mit der Art und Weise, wie der Würfel erstellt wird, nicht?
Antwort1
Da jedes Rechteck unabhängig ausgefüllt wird, wird keines als Loch behandelt. Bei einem Festkörper muss man die Flächen von der Ferne zur Nähe zeichnen oder einen Normalvektor zuweisen und nur Flächen zeichnen, die in diese Richtung zeigen.
\documentclass[border=5,tikz]{standalone}
% Uses \nearx, \neary and \nearz
% #1=x, #2=y, #3=z, #4={code to be executed}
\def\ifnear(#1,#2,#3)#4
{\pgfmathparse{#1*\nearx+#2*\neary+#3*\nearz}%
\ifdim\pgfmathresult pt>0pt\relax #4\fi}
\usepackage{tikz-3dplot}
\begin{document}
\foreach\s in{2,4,...,360}{
\pgfmathsetmacro{\aTheta}{2.71828+\s}
\pgfmathsetmacro{\aPhi}{2.71828+\s*2}
\pgfmathsetmacro{\nearx}{sin(\aPhi)*sin(\aTheta)}
\pgfmathsetmacro{\neary}{-cos(\aPhi)*sin(\aTheta)}
\pgfmathsetmacro{\nearz}{cos(\aTheta)}
\begin{tikzpicture}[scale=.1]
\path(-15cm,-15cm)(15cm,15cm);
\tdplotsetmaincoords{\aTheta}{\aPhi}
\begin{scope}[tdplot_main_coords]
\ifnear(0,0,-1){\draw[fill=green!80!black]
(0,0,0)--(20,0,0)--(20,20,0)--(0,20,0)--cycle;} % bottom
\ifnear(0,0,1){\draw[fill=green!80!black]
(0,0,20)--(20,0,20)--(20,20,20)--(0,20,20)--cycle;} % top
\ifnear(0,-1,0){\draw[fill=red!80!black]
(0,0,0)--(20,0,0)--(20,0,20)--(0,0,20)--cycle;}
\ifnear(0,1,0){\draw[fill=red!80!black]
(0,20,0)--(20,20,0)--(20,20,20)--(0,20,20)--cycle;}
\ifnear(-1,0,0){\draw[fill=red!80!black]
(0,0,0)--(0,20,0)--(0,20,20)--(0,0,20)--cycle;}
\ifnear(1,0,0){\draw[fill=red!80!black]
(20,0,0)--(20,20,0)--(20,20,20)--(20,0,20)--cycle;}
\end{scope}
\end{tikzpicture}
}
\end{document}
Wenn Sie die Vorzeichen umkehren \nearx
, \neary
wird \nearz
die andere Seite des Würfels angezeigt.
Der Normalvektor ist eine Linie, die senkrecht zur Fläche steht und (für unsere Zwecke) vom Mittelpunkt weg zeigt. Für regelmäßige Polyeder kann man den Vektor vom Mittelpunkt des Objekts zum Mittelpunkt der Fläche verwenden.
Der Mittelpunkt des Würfels liegt bei (10,10,10). Da der Mittelpunkt der unteren Fläche bei (10,10,0) lag, war der (normalisierte) Normalvektor für diese Fläche (0,0,-1).