von guy.brush™ » Mi 7. Dez 2011, 14:09
Hallo,
eine Antwort vom pgfplots-Meister, ich fühle mich geehrt

. Bei Gelegenheit werde ich mir vermutlich einmal anschauen, wie kompliziert dieser "painter's algorithm" ist, aber in angewandter Mathematik bzw. Numerik und Algorithmen bin ich nicht sonderlich gut und habe ich auch noch nicht so viel mit gemacht

.
Danke erst einmal für die Erklärung mit dem "z buffer=sort".
"axis equal" hilft teilweise wirklich, vielen Dank! Etwas problematisch wird es, wenn man gewisse Werte bei view={...}{...} setzen möchte. Ich habe jetzt auch noch ein bisschen "plot box ratio" herumgespielt, damit bekommt man dann auch teilweise akzeptable bis gute Ergebnisse. Für den Donut habe ich 2 Varianten gefunden (ich möchte, dass es so aussieht, als ob der auf einem Tisch liegt und man von oben schräg draufkommt, er soll also nicht "diagonal" im Raum liegen ... ich hoffe du/ihr versteh(s)t, was ich meine, die Beschreibung ist im 3D-Raum etwas "dürftig"

).
\documentclass{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage{pgfplots}
\pgfplotsset{compat=1.4}
\begin{document}
\begin{figure}
\centering
\begin{tikzpicture}
\newcommand*\radius{1}
\newcommand*\Radius{6}
\begin{axis}[scale=2,view={0}{50},height=4cm,width=7cm]
\addplot3[surf,domain=0:2*pi,z buffer=sort,opacity=0.75]
({(\Radius + \radius * cos(deg(y))) * cos(deg(x))},
{(\Radius + \radius * cos(deg(y))) * sin(deg(x))},
{\radius * sin(deg(y))});
\end{axis}
\end{tikzpicture}
\caption{Torus}
\end{figure}
\begin{figure}
\centering
\begin{tikzpicture}
\newcommand*\radius{1}
\newcommand*\Radius{6}
\begin{axis}[scale=1.5,view/v=20,plot box ratio={1 1 0.2}]%[scale=2,view={0}{50},height=4cm,width=7cm]
\addplot3[surf,domain=0:2*pi,z buffer=sort,opacity=0.75]
({(\Radius + \radius * cos(deg(y))) * cos(deg(x))},
{(\Radius + \radius * cos(deg(y))) * sin(deg(x))},
{\radius * sin(deg(y))});
\end{axis}
\end{tikzpicture}
\caption{Torus}
\end{figure}
\begin{figure}
\centering
\begin{tikzpicture}
\begin{axis}[axis equal,scale=2,axis lines=none]%[x={(10pt,5pt)},y={(10pt,0)},z={(0,20pt)}]
\addplot3[surf,domain=-1:1,y domain=0:2*pi,z buffer=sort,opacity=0.75]
({cos(deg(y)) * (1 + x/2 * cos(deg(y)/2))},
{sin(deg(y)) * (1 + x/2 * cos(deg(y)/2))},
{x/2 * sin(deg(y)/2)});
\end{axis}
\end{tikzpicture}
\caption{M"obiusband}
\end{figure}
\end{document}
Die ersten beiden Fälle zeigen meine anderen Lösungsansätze noch. Ich hoffe, sie würden im Normalfall keine Probleme machen. ich muss aber dazu sagen, dass ich aktuell nur die Form der Plots benötige ohne Achsen. Daher auch noch eine ergänzende Frage:
Beim Möbiusband sieht man es ganz gut. Dort ist ja noch viel (weißer) Platz um das Band herum, insb. erkennt man es zur \caption der figure-Umgebung. Kann ich diesen irgendwie "löschen"? Ich denke, dass die Achsen nicht umsonst so lang sind, auch wenn es so aussieht, als ob die Achsen länger sind als das Möbiusband in die jeweilige Richtung.
Mit \clip außerhalb der axis-Umgebung zu arbeiten, habe ich gerade nicht hinbekommen und würde ich auch als eher umständlichere und "dirty"-Lösung empfinden.
Viele Grüße,
\\ guy.brush
Hallo,
eine Antwort vom pgfplots-Meister, ich fühle mich geehrt :). Bei Gelegenheit werde ich mir vermutlich einmal anschauen, wie kompliziert dieser "painter's algorithm" ist, aber in angewandter Mathematik bzw. Numerik und Algorithmen bin ich nicht sonderlich gut und habe ich auch noch nicht so viel mit gemacht :).
Danke erst einmal für die Erklärung mit dem "z buffer=sort".
"axis equal" hilft teilweise wirklich, vielen Dank! Etwas problematisch wird es, wenn man gewisse Werte bei view={...}{...} setzen möchte. Ich habe jetzt auch noch ein bisschen "plot box ratio" herumgespielt, damit bekommt man dann auch teilweise akzeptable bis gute Ergebnisse. Für den Donut habe ich 2 Varianten gefunden (ich möchte, dass es so aussieht, als ob der auf einem Tisch liegt und man von oben schräg draufkommt, er soll also nicht "diagonal" im Raum liegen ... ich hoffe du/ihr versteh(s)t, was ich meine, die Beschreibung ist im 3D-Raum etwas "dürftig" ;)).
[code]
\documentclass{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage{pgfplots}
\pgfplotsset{compat=1.4}
\begin{document}
\begin{figure}
\centering
\begin{tikzpicture}
\newcommand*\radius{1}
\newcommand*\Radius{6}
\begin{axis}[scale=2,view={0}{50},height=4cm,width=7cm]
\addplot3[surf,domain=0:2*pi,z buffer=sort,opacity=0.75]
({(\Radius + \radius * cos(deg(y))) * cos(deg(x))},
{(\Radius + \radius * cos(deg(y))) * sin(deg(x))},
{\radius * sin(deg(y))});
\end{axis}
\end{tikzpicture}
\caption{Torus}
\end{figure}
\begin{figure}
\centering
\begin{tikzpicture}
\newcommand*\radius{1}
\newcommand*\Radius{6}
\begin{axis}[scale=1.5,view/v=20,plot box ratio={1 1 0.2}]%[scale=2,view={0}{50},height=4cm,width=7cm]
\addplot3[surf,domain=0:2*pi,z buffer=sort,opacity=0.75]
({(\Radius + \radius * cos(deg(y))) * cos(deg(x))},
{(\Radius + \radius * cos(deg(y))) * sin(deg(x))},
{\radius * sin(deg(y))});
\end{axis}
\end{tikzpicture}
\caption{Torus}
\end{figure}
\begin{figure}
\centering
\begin{tikzpicture}
\begin{axis}[axis equal,scale=2,axis lines=none]%[x={(10pt,5pt)},y={(10pt,0)},z={(0,20pt)}]
\addplot3[surf,domain=-1:1,y domain=0:2*pi,z buffer=sort,opacity=0.75]
({cos(deg(y)) * (1 + x/2 * cos(deg(y)/2))},
{sin(deg(y)) * (1 + x/2 * cos(deg(y)/2))},
{x/2 * sin(deg(y)/2)});
\end{axis}
\end{tikzpicture}
\caption{M"obiusband}
\end{figure}
\end{document}
[/code]
Die ersten beiden Fälle zeigen meine anderen Lösungsansätze noch. Ich hoffe, sie würden im Normalfall keine Probleme machen. ich muss aber dazu sagen, dass ich aktuell nur die Form der Plots benötige ohne Achsen. Daher auch noch eine ergänzende Frage:
Beim Möbiusband sieht man es ganz gut. Dort ist ja noch viel (weißer) Platz um das Band herum, insb. erkennt man es zur \caption der figure-Umgebung. Kann ich diesen irgendwie "löschen"? Ich denke, dass die Achsen nicht umsonst so lang sind, auch wenn es so aussieht, als ob die Achsen länger sind als das Möbiusband in die jeweilige Richtung.
Mit \clip außerhalb der axis-Umgebung zu arbeiten, habe ich gerade nicht hinbekommen und würde ich auch als eher umständlichere und "dirty"-Lösung empfinden.
Viele Grüße,
\\ guy.brush