Hallo liebe LaTeX-Freunde,

ich möchte das tun was im Titel gefragt. Wie folgt sieht mein Minimalbsp. aus:

Open in Online-Editor
\documentclass[margin=2mm,tikz]{standalone}
\usepackage{tikz}
\usepackage{pgfplots}

\begin{document}
\begin{tikzpicture}
\begin{axis}

\addplot3[domain=-1:1, samples=20,y domain=0:1, opacity=.5, colormap=
{redblack}{color=(gray) color=(red)}, surf, shader=interp
]
({(tan(deg(.05*pi))/(sqrt(2)-tan(deg(.05*pi))))*x-(tan(deg(.05*pi))/(sqrt(2)-tan(deg(.05*pi))))*y} ,
{x},
{y});

\addplot3[domain=-1:1, samples=20,y domain=0:1, opacity=.5, colormap=
{redblack}{color=(gray) color=(green)}, surf, shader=interp
]
({x},
{(tan(deg(.05*pi))/(sqrt(2)-tan(deg(.05*pi))))*x-(tan(deg(.05*pi))/(sqrt(2)-tan(deg(.05*pi))))*y} ,
{y});

\end{axis}
\end{tikzpicture}

\end{document}

Sprich ich würde gerne die Schnitt-Gerade der zwei geplotteten Ebenen-Ausschnitte plotten. Kennt jemand hierfür irgend ein Paket oder Trick?

gefragt 20 Apr '15, 07:05

Ross's gravatar image

Ross
3751422
Akzeptiert: 86%


Meinst du so etwas? (mit xelatex oder latex->dvips->ps2pdf laufen lassen.)

Open in Online-Editor
\documentclass[margin=2mm,pstricks]{standalone}
\usepackage{pst-solides3d}

\begin{document}
\begin{pspicture}[solidmemory](-3,-3)(1,5)
\psset{viewpoint=20 150 40 rtp2xyz,Decran=15,lightsrc=-10 15 10,action=none}
\defFunction[algebraic]{funcA}(x,y)
    {(tan(.05*pi)/(sqrt(2)-tan(.05*pi)))*x-(tan(.05*pi)/(sqrt(2)-tan(.05*pi)))*y}
    {x}
    {y}
\psSolid[object=surfaceparametree,linecolor={[cmyk]{1,0,1,0.5}},
     base=-1 pi pi neg 5 pi mul 3 div,
     fillcolor=yellow!50,incolor=green!30,
     function=funcA,linewidth=0.1\pslinewidth,ngrid=30,name=A]%
\defFunction[algebraic]{funcB}(x,y) 
    {x}
    {(tan(.05*pi)/(sqrt(2)-tan(.05*pi)))*x-(tan(.05*pi)/(sqrt(2)-tan(.05*pi)))*y}
    {y}
\psSolid[object=surfaceparametree,linecolor={[cmyk]{1,0,1,0.5}},
    base=-1 pi pi neg 5 pi mul 3 div,
    fillcolor=cyan!50,incolor=magenta!30,
    function=funcB,linewidth=0.1\pslinewidth,ngrid=30,name=B]%
\psSolid[object=fusion,base=A B,action=draw**]  
\end{pspicture}

\end{document}

alt text

Permanenter link

beantwortet 31 Jul '15, 15:21

Herbert's gravatar image

Herbert
5.1k34

bearbeitet 31 Jul '15, 15:23

Wenn Du diesen länglichen Ausdruck in die Definition einer Funktion absorbierst, ist es recht einfach. Du musst nur den Teil hinter der grünen Ebene zuerst zeichnen, dann die grüne Ebene und dann den Rest.

Öffne in Overleaf
\documentclass[margin=2mm,tikz]{standalone}
\usepackage{tikz}
\usepackage{pgfplots}
\pgfplotsset{compat=1.16}

\begin{document}
\begin{tikzpicture}[declare function={f(\x,\y)=(tan(deg(.05*pi))/(sqrt(2)-tan(deg(.05*pi))))*\x-(tan(deg(.05*pi))/(sqrt(2)-tan(deg(.05*pi))))*\y;}]
 \begin{axis}
 \begin{scope}
  \clip (0,{0},{0}) -- ({f(0,1)},{f(0,1)} ,{1}) -- 
  ({f(1,1)},{1} ,{1}) -- ({f(1,0)},{1} ,{0});
  \addplot3[domain=-1:1, samples=20,y domain=0:1, opacity=.5, colormap=
  {redblack}{color=(gray) color=(red)}, surf, shader=interp]
  ({f(x,y)} ,{x},{y});
 \end{scope}

 \addplot3[domain=-1:1, samples=20,y domain=0:1, opacity=.5, colormap=
 {redblack}{color=(gray) color=(green)}, surf, shader=interp]
 ({x},{f(x,y)},{y});

 \begin{scope}
  \clip (0,{0},{0}) -- ({f(0,1)},{f(0,1)} ,{1}) -- 
  ({f(-1,1)},{-1} ,{1}) -- ({f(-1,0)},{-1} ,{0});
  \addplot3[domain=-1:1, samples=20,y domain=0:1, opacity=.5, colormap=
  {redblack}{color=(gray) color=(red)}, surf, shader=interp]
  ({f(x,y)} ,{x},{y});
 \end{scope}
 \end{axis}
\end{tikzpicture}
\end{document}

alt text

Im Prinzip kannst Du auch pgfplots automatisch die Sortierung machen lassen, entweder mit patch plots oder restrict expression to domain. Allerdings bekommst Du dann Klötzchen so wie in der PSTricks Antwort ausser Du bestimmst die Schnittmenge analytisch, was aber dann im Wesentlichen auf das Selbe rausläuft.

Permanenter link

beantwortet 26 Apr, 21:20

Gel%C3%B6scht's gravatar image

Gelöscht
(inaktiv)

Aha, das geht also doch mit pgfplots. Kann man auch auf die Ebenen so ein (dezentes) Gitter legen wie bei pstricks?

(27 Apr, 05:41) cis

@cis Hast Du Dir die Schnittlinie in der pstricks Antwort genau angeschaut? Das "dezente Gitter" ist ein Trick. Aber wenn Deine Frage ist, ob man ein Gitter über die Ebenen legen kann, ist die Antwort natürlich ja. Eine Möglichkeit ist, alle shader=interp durch shader=flat zu ersetzen.

(27 Apr, 10:53) Gelöscht
Deine Antwort auf die Frage (nicht auf andere Antworten)
Knebel-Vorschau

Folge dieser Frage

Per E-Mail:

Wenn Du Dich anmeldest, kannst Du Updates hier abonnieren

Per RSS:

Antworten

Antworten und Kommentare

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs füge einfach zwei Leerzeichen an die Stelle ein, an der die neue Zeile sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Zugeordnete Themen:

×655
×273
×20
×10

Frage gestellt: 20 Apr '15, 07:05

Frage wurde angeschaut: 5,870 Mal

Zuletzt aktualisiert: 27 Apr, 10:53