
Ich versuche zum Spaß, die folgende Abbildung in TikZ zu reproduzieren:
Bisher konnte ich Folgendes bekommen:
aber das Ergebnis sieht meiner Meinung nach ziemlich schlecht aus und die Art, wie ich mit dem Aufbau der Dreiecke begonnen habe, scheint nicht so gut zu sein (und bei der Kugel ist es mir nicht gelungen):
Der LaTeX-Code ist hier:
\documentclass{article}
\usepackage{pgfplots}
\pgfplotsset{compat=1.16}
\usepackage{tikz,tikz-3dplot}
\usepackage{xcolor}
\usetikzlibrary{calc,3d,intersections, positioning,intersections,shapes}
\begin{document}
%hyperboloid
\begin{tikzpicture}
%triangle definition
\tikzset{declare function={%
fx(\x)=ifthenelse(\x<0,0.75*(\x+1),0.75*(-\x+1));
fy(\y)=ifthenelse(\y<0,0,ifthenelse(\y>1,-2+\y,-\y));
}}
\begin{axis}[hide axis,view={-20}{45},scale=0.8]
\addplot3 [surf,draw=black,domain=-1.2:1.2,domain y=-1.5:1.5,opacity=0.5] {x^2-y^2};
\addplot3 [domain=-2:2,samples=81,smooth,fill=green,fill opacity=0.1] ({fx(x)},{fy(x)},{fx(x)^2-fy(x)^2});
\end{axis}
\end{tikzpicture}
%sphere
\begin{tikzpicture}
\begin{axis}[hide axis,axis equal,width=8cm,height=8cm,domain=-1:1,domain y=-1:1 ]
\addplot3[%
opacity = 0.5,
surf,draw=black,
z buffer = sort,
variable = \u,
variable y = \v,
domain = 0:180,
y domain = 0:360,
]
({cos(u)*sin(v)}, {sin(u)*sin(v)}, {cos(v)});
\end{axis}
\newcommand{\InterSec}[3]{%
\path[name intersections={of=#1 and #2, by=#3, sort by=#1,total=\t}]
\pgfextra{\xdef\InterNb{\t}}; }
\pgfmathsetmacro\R{2}
\foreach \angle[count=\n from 1] in {-5,225,290} {
\begin{scope}[rotate=\angle,transform canvas={xshift = 3.2cm,yshift=3.4cm}]
\path[draw,dashed,name path global=d\n] (2,0) arc [start angle=0,
end angle=180,
x radius=2cm,
y radius=1cm] ;
\path[draw,name path global=s\n] (-2,0) arc [start angle=180,
end angle=360,
x radius=2cm,
y radius=1cm] ;
\end{scope}
}
\begin{scope}[transform canvas={xshift = 3.2cm,yshift=3.4cm}]
\InterSec{s1}{s2}{I3} ;
\InterSec{s1}{s3}{I2} ;
\InterSec{s3}{s2}{I1} ;
%
\fill[fill=green,opacity=0.5] (I1) to [bend right=8.5] (I2) to [bend left=7]
(I3) to [bend left=6] (I1);
\end{scope}
\end{tikzpicture}
%plane
\begin{tikzpicture}
\begin{axis}[hide axis,
xlabel=$x$, ylabel=$y$, zlabel = $z$,,scale=0.8
]
\addplot3[
surf,draw=black, shader=flat,
domain=-5:5,
domain y=-5:5,
samples =10,
opacity = 0.5
] {x + 2*y -1};
\draw[black, very thick,fill=green,fill opacity=0.1] (-2, -3, -8) -- (2, 2, 5) -- (-1, 4, 7) -- cycle;
\end{axis}
\end{tikzpicture}
\end{document}
Vielen Dank für Ihre Hilfe!