PGFPlots を使用して x^2+y^2

PGFPlots を使用して x^2+y^2

、およびDで定義される物体を描きたいと思います。x^2+y^2<=9z<=16-x^2-y^2z>=0

x^2+y^2=9z=16-x^2-y^2およびを不透明度を低くしてグラフ化し、交差点を塗りつぶす (またはパターンを使用する) ことで、前の式で定義したz=0ボディを作成する必要があります。D

私が欲しいもの

しかし、タスクを完了できません。これが MWE です:

\documentclass{article}
\usepackage[a4paper,margin=1in,footskip=0.25in]{geometry}

\usepackage{pgfplots}
\pgfplotsset{compat=1.15}

\begin{document}

\begin{center}
    \begin{tikzpicture}
        \begin{axis} [
                axis on top,
                axis lines=center,
                xlabel=$x$,
                ylabel=$y$,
                zlabel=$z$,
                xmin=-5,
                ymin=-5,
                zmin=-1,
                xmax=5,
                ymax=5,
                zmax=17,
                xtick={-4,-3,0,3,4},
                xticklabels={$-4$,$-3$,$0$,$3$,$4$},
                ytick={-4,-3,0,3,4},
                yticklabels={$-4$,$-3$,$0$,$3$,$4$},
                ztick={0,16},
                zticklabels={$0$,$16$},
                ticklabel style={font=\tiny},
                legend pos=outer north east,
                legend style={at={(1.25,.81)},anchor=north east},
                legend cell align={left},
                view={135}{25}
            ]
            \addplot3[orange,opacity=.5,samples=51,samples y=21,variable=t,variable y=r,domain=0:360,domain y=0:2*pi,restrict z to domain=0:16] ({r*cos(t)},{r*sin(t)},{16-r*r});   % z=16-x^2-y^2
            \addlegendentry{\(16-x^2-y^2\)}
            \addplot3[green,opacity=.5,samples=51,samples y=21,variable=t,variable y=r,domain=0:360,domain y=0:2*pi,restrict z to domain=0:16] ({3*cos(t)},{3*sin(t)},{0});   % x^2+y^2=9
            \addlegendentry{\(x^2+y^2=9\)}
            \fill[cyan,opacity=.5] (3,3,0) -- (3,-3,0) -- (-3,-3,0) 
        -- (-3,3,0);    % z=0
            \addlegendentry{\(z=0\)}    % This label is not showing because we used 'fill', not 'addplot3'
            % Here should be the code of the intersection of the three surfaces...
        \end{axis}
    \end{tikzpicture}
\end{center}

\end{document}

私がしたこと

編集。感謝しますマーモット私が望んでいることを部分的に達成するのを手伝ってくれた人:

\documentclass{article}
\usepackage[a4paper,margin=1in,footskip=0.25in]{geometry}

\usepackage{pgfplots}
\pgfplotsset{compat=1.15}

\begin{document}

\begin{center}
    \begin{tikzpicture}
        \begin{axis} [
                axis on top,
                axis lines=center,
                xlabel=$x$,
                ylabel=$y$,
                zlabel=$z$,
                xmin=-5,
                ymin=-5,
                zmin=-1,
                xmax=5,
                ymax=5,
                zmax=17,
                xtick={-4,-3,0,3,4},
                xticklabels={$-4$,$-3$,$0$,$3$,$4$},
                ytick={-4,-3,0,3,4},
                yticklabels={$-4$,$-3$,$0$,$3$,$4$},
                ztick={0,16},
                zticklabels={$0$,$16$},
                ticklabel style={font=\tiny},
                legend pos=outer north east,
                legend style={at={(1.45,.85)},anchor=north east},
                legend cell align={left},
                view={135}{25}
            ]
            \addplot3[opacity=.5,surf,shader=interp,colormap={orange}{color=(orange!50) color=(orange!50)},variable=t,variable y=r,domain=0:360,domain y=0:2*pi,restrict z to domain=0:16] ({r*cos(t)},{r*sin(t)},{16-r*r});  % z=16-x^2-y^2
            \addlegendentry{\(z=16-x^2-y^2\)}
            \addplot3[opacity=.5,surf,shader=interp,domain=0:360,domain y=0:16,colormap={green}{color=(green!50) color=(green!50)}] ({3*cos(x)},{3*sin(x)},{y}); % x^2+y^2=9
            \addlegendentry{\(x^2+y^2=9\)}
            %\fill[cyan,opacity=.5] (4,4,0) -- (4,-4,0) -- (-4,-4,0) -- (-4,4,0);    % z=0
            \addplot3[fill=cyan,opacity=.5,domain=-4:4, domain y=-4:4] (x,y,0);
            \addlegendentry{\(z=0\)}
        \end{axis}
    \end{tikzpicture}
\end{center}

\end{document}

新しいMWE

ただし、次のことが必要です。

  • 出力を修正z=0fill(プロットではないため凡例を追加できないため、使用したくありません)。
  • 固体を埋めるDパターンの使用:パターンを使用したソリッドまたはそれを埋める:しっかり充填するプログラミングにかかる​​時間が短縮されます。

興味深いリンクをいくつか紹介します:

ありがとう!!

答え1

いかがでしょうか

\documentclass{article}
\usepackage[a4paper,margin=1in,footskip=0.25in]{geometry}

\usepackage{pgfplots}
\pgfplotsset{compat=1.15}

\begin{document}

\begin{center}
    \begin{tikzpicture}
        \begin{axis} [
                axis on top,
                axis lines=center,
                xlabel=$x$,
                ylabel=$y$,
                zlabel=$z$,
                xmin=-5,
                ymin=-5,
                zmin=-1,
                xmax=5,
                ymax=5,
                zmax=17,
                xtick={-4,-3,0,3,4},
                xticklabels={$-4$,$-3$,$0$,$3$,$4$},
                ytick={-4,-3,0,3,4},
                yticklabels={$-4$,$-3$,$0$,$3$,$4$},
                ztick={0,16},
                zticklabels={$0$,$16$},
                ticklabel style={font=\tiny},
                legend pos=outer north east,
                legend style={at={(1.45,.85)},anchor=north east},
                legend cell align={left},
                view={135}{25}
            ]
            \addplot3[opacity=.5,surf,shader=interp,colormap={orange}{color=(orange!50) color=(orange!50)},variable=t,variable y=r,domain=0:360,domain y=0:2*pi,restrict z to domain=0:16] ({r*cos(t)},{r*sin(t)},{16-r*r});  % z=16-x^2-y^2
            \addlegendentry{\(z=16-x^2-y^2\)}
            \addplot3[opacity=.5,surf,shader=interp,domain=0:360,domain y=0:16,colormap={green}{color=(green!50) color=(green!50)}] ({3*cos(x)},{3*sin(x)},{y}); % x^2+y^2=9
            \addlegendentry{\(x^2+y^2=9\)}
            %\fill[cyan,opacity=.5] (4,4,0) -- (4,-4,0) -- (-4,-4,0) -- (-4,4,0);    % z=0
            \addplot3[surf,shader=interp,opacity=.5,domain=-4:4, domain y=-4:4,
            colormap={dull}{color=(cyan) color=(cyan)},opacity=0.5] {0};
            \addlegendentry{\(z=0\)}
            \addplot3[mesh,color=gray,ultra thin,domain=0:360,domain y=0:4,z
            buffer=sort,samples=31,samples y=41] 
            ({min(y,3)*cos(x)},{min(y,3)*sin(x)},{16-y*y});
        \end{axis}
    \end{tikzpicture}
\end{center}

\end{document}

ここに画像の説明を入力してください

? 意地悪なアヒルのための素敵なケージになるかもしれません。 ;-)

これは表面を示しています。元のプロットをどうしたいのかわかりません。

\documentclass{article}
\usepackage[a4paper,margin=1in,footskip=0.25in]{geometry}

\usepackage{pgfplots}
\pgfplotsset{compat=1.15}

\begin{document}

\begin{center}
    \begin{tikzpicture}
        \begin{axis} [
                axis on top,
                axis lines=center,
                xlabel=$x$,
                ylabel=$y$,
                zlabel=$z$,
                xmin=-5,
                ymin=-5,
                zmin=-1,
                xmax=5,
                ymax=5,
                zmax=17,
                xtick={-4,-3,0,3,4},
                xticklabels={$-4$,$-3$,$0$,$3$,$4$},
                ytick={-4,-3,0,3,4},
                yticklabels={$-4$,$-3$,$0$,$3$,$4$},
                ztick={0,16},
                zticklabels={$0$,$16$},
                ticklabel style={font=\tiny},
                legend pos=outer north east,
                legend style={at={(1.25,.81)},anchor=north east},
                legend cell align={left},
                view={135}{25}
            ]
%             \addplot3[orange,opacity=.5,samples=51,samples y=21,variable=t,variable y=r,domain=0:360,domain y=0:2*pi,restrict z to domain=0:16] ({r*cos(t)},{r*sin(t)},{16-r*r});   % z=16-x^2-y^2
%             \addlegendentry{\(16-x^2-y^2\)}
%             \addplot3[green,opacity=.5,samples=51,samples y=21,variable=t,variable y=r,domain=0:360,domain y=0:2*pi,restrict z to domain=0:16] ({3*cos(t)},{3*sin(t)},{0});   % x^2+y^2=9
%             \addlegendentry{\(x^2+y^2=9\)}
%             \fill[cyan,opacity=.5] (3,3,0) -- (3,-3,0) -- (-3,-3,0) 
%         -- (-3,3,0);    % z=0
%             %\addlegendentry{\(z=0\)}    % This label is not showing because we used 'fill', not 'addplot3'
            % Here should be the code of the intersection of the three surfaces...
            \addplot3[surf,shader=interp,domain=0:360,domain y=0:7,z buffer=sort] 
            ({3*cos(x)},{3*sin(x)},{y});
            \addplot3[data cs=polar,surf,shader=interp,domain=0:360,domain y=0:3] {16-y*y};
        \end{axis}
    \end{tikzpicture}
\end{center}
\end{document}

ここに画像の説明を入力してください

これは私には毒キノコのように見えます:

\documentclass{article}
\usepackage[a4paper,margin=1in,footskip=0.25in]{geometry}

\usepackage{pgfplots}
\pgfplotsset{compat=1.15}

\begin{document}

\begin{center}
    \begin{tikzpicture}
        \begin{axis} [
                axis on top,
                axis lines=center,
                xlabel=$x$,
                ylabel=$y$,
                zlabel=$z$,
                xmin=-5,
                ymin=-5,
                zmin=-1,
                xmax=5,
                ymax=5,
                zmax=17,
                xtick={-4,-3,0,3,4},
                xticklabels={$-4$,$-3$,$0$,$3$,$4$},
                ytick={-4,-3,0,3,4},
                yticklabels={$-4$,$-3$,$0$,$3$,$4$},
                ztick={0,16},
                zticklabels={$0$,$16$},
                ticklabel style={font=\tiny},
                legend pos=outer north east,
                legend style={at={(1.25,.81)},anchor=north east},
                legend cell align={left},
                view={135}{25}
            ]
%             \addplot3[orange,opacity=.5,samples=51,samples y=21,variable=t,variable y=r,domain=0:360,domain y=0:2*pi,restrict z to domain=0:16] ({r*cos(t)},{r*sin(t)},{16-r*r});   % z=16-x^2-y^2
%             \addlegendentry{\(16-x^2-y^2\)}
%             \addplot3[green,opacity=.5,samples=51,samples y=21,variable=t,variable y=r,domain=0:360,domain y=0:2*pi,restrict z to domain=0:16] ({3*cos(t)},{3*sin(t)},{0});   % x^2+y^2=9
%             \addlegendentry{\(x^2+y^2=9\)}
%             \fill[cyan,opacity=.5] (3,3,0) -- (3,-3,0) -- (-3,-3,0) 
%         -- (-3,3,0);    % z=0
%             %\addlegendentry{\(z=0\)}    % This label is not showing because we used 'fill', not 'addplot3'
            % Here should be the code of the intersection of the three surfaces...
            \addplot3[surf,shader=interp,domain=0:360,domain y=0:7,z
            buffer=sort,colormap=
        {greenblack}{color=(green!50!black) color=(green)}] 
            ({3*cos(x)},{3*sin(x)},{y});
            \addplot3[data cs=polar,surf,shader=interp,domain=0:360,domain y=0:3,color=orange] {16-y*y};
        \end{axis}
    \end{tikzpicture}
\end{center}
\end{document}

ここに画像の説明を入力してください

一気に描くこともできます。

\documentclass{article}
\usepackage[a4paper,margin=1in,footskip=0.25in]{geometry}
\usepackage{pgfplots}
\pgfplotsset{compat=1.15}

\begin{document}

\begin{center}
    \begin{tikzpicture}
        \begin{axis} [
                axis on top,
                axis lines=center,
                xlabel=$x$,
                ylabel=$y$,
                zlabel=$z$,
                xmin=-5,
                ymin=-5,
                zmin=-1,
                xmax=5,
                ymax=5,
                zmax=17,
                xtick={-4,-3,0,3,4},
                xticklabels={$-4$,$-3$,$0$,$3$,$4$},
                ytick={-4,-3,0,3,4},
                yticklabels={$-4$,$-3$,$0$,$3$,$4$},
                ztick={0,16},
                zticklabels={$0$,$16$},
                ticklabel style={font=\tiny},
                legend pos=outer north east,
                legend style={at={(1.25,.81)},anchor=north east},
                legend cell align={left},
                view={135}{25}
            ]
            % Here should be the code of the intersection of the three surfaces...
            \addplot3[surf,shader=interp,domain=0:360,domain y=0:4,z
            buffer=sort,colormap=
        {greenorange}{color=(green!80!black) color=(orange)},samples=31,samples
        y=41] 
            ({min(y,3)*cos(x)},{min(y,3)*sin(x)},{16-y*y});
        \end{axis}
    \end{tikzpicture}
\end{center}
\end{document}

ここに画像の説明を入力してください

関連情報