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, 13:05

Ross's gravatar image

Ross
37591522
Akzeptiert-Rate: 100%


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, 21:21

Herbert's gravatar image

Herbert
5.1k34
Akzeptiert-Rate: 31%

bearbeitet 31 Jul '15, 21: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 27 Apr '19, 03:20

Community's gravatar image

Community
21
Akzeptiert-Rate: 56%

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

(27 Apr '19, 11: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 '19, 16:53) Community
Deine Antwort
Vorschau umschalten

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

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ügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×730
×298
×20
×13

gestellte Frage: 20 Apr '15, 13:05

Frage wurde gesehen: 12,270 Mal

zuletzt geändert: 27 Apr '19, 16:53