このレベル曲線図を正確に作成する方法

このレベル曲線図を正確に作成する方法

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

この投稿では、

レベル曲線と水平トレースの関係

すでに非常に素晴らしい絵が完成していますが、いくつかの詳細が欠けています。そして、私はそれを実現できません。

答え1

このようなプロットの中には、概念的に興味深いものもあり、回答は他のユーザーにある程度抽象的で役立つ情報を提供する可能性があります。その他の部分は単に退屈です。プロットを希望どおりに実行するには、私見では、基本を理解できる段階まで自分自身を導き、それから実行するだけです。

以下は、リンク先の投稿にいくつかの詳細を追加したものです。これにより、希望どおりの結果を正確に得ることができるようになることを願っています。

\documentclass[tikz,border=3mm]{standalone}
\makeatletter
\pgfmathdeclarefunction{phicrit}{0}{%
\begingroup%
\pgfmathparse{atan2(\pgf@xx,\pgf@yx)}%
\pgfmathsmuggle\pgfmathresult\endgroup%
}%
\makeatother
\usepackage{pgfplots}
\pgfplotsset{compat=1.16}
\begin{document}
\begin{tikzpicture}
\begin{axis}[width=15cm,
    axis lines=middle,ymin=0,xmin=0,zmin=0,zmax=50,smooth,
    colormap={irk}{color=(cyan!50) color=(cyan)},point meta=-z-x-y,view={115}{20},
    xtick=\empty,ytick=\empty,ztick={0,45},
    declare function={f(\x)=30+15*cos(\x*36);}]
  \pgfplotsinvokeforeach{20,25,30,35,40,45}{%
  \draw[red] (7,7,0) circle[radius={acos((#1-30)/15)/36}];
  \path ({7+cos(-50+5*#1)*acos((#1-30)/15)/36},{7+sin(-50+5*#1)*acos((#1-30)/15)/36},0)
   node[inner sep=0.5pt,fill=white,font=\tiny] {$k=#1$};
  \draw[dashed] (7,{7-acos((#1-30)/15)/36},0) --
  (7,{7-acos((#1-30)/15)/36},#1) (7,{7+acos((#1-30)/15)/36},0) --
  (7,{7+acos((#1-30)/15)/36},#1);
  \addplot3[domain=phicrit+30-#1/3:phicrit+15+180-#1/3,color=cyan,samples y=0,smooth,
    dashed]  
  ({7+cos(x)*acos((#1-30)/15)/36},{7+sin(x)*acos((#1-30)/15)/36},{#1});
  }
  %
  \addplot3[domain=-5:5,color=gray,samples y=0]  ({7},{7+x},{f(x)});
  %
  \addplot3[surf,shader=interp,domain y=0:360,domain=0:5,z buffer=sort,
    opacity=0.8] 
   ({7+x*cos(y)},{7+x*sin(y)},{f(x)});
  \pgfplotsinvokeforeach{20,25,30,35,40,45}{% 
  \addplot3[domain=phicrit+30-#1/3:phicrit-30-180+45-#1/3,color=cyan,samples y=0,smooth]  
  ({7+cos(x)*acos((#1-30)/15)/36},{7+sin(x)*acos((#1-30)/15)/36},{#1});
  } 
\end{axis}
\end{tikzpicture}
\end{document}

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

関連情報