平滑等高线图并添加渐变箭头

平滑等高线图并添加渐变箭头

下面的代码生成函数的轮廓线$(x,y)\mapsto e^{-x^2-y^2}$。我想要:

  • 平滑轮廓线。我发现此解决方案直接使用 gnuplot 时,whis 是有效的。但是,使用 gnuplot通过TikZ 似乎无法处理“ isosamples ”变量,或者至少我没有成功使用它。
  • 添加梯度矢量来可视化它们与轮廓线的正交性。

任何帮助,将不胜感激 !

\documentclass[a4paper,10pt]{article}

% TikZ Figures
\usepackage{tikz,pgfplots}

\begin{document}

\begin{tikzpicture} 
\begin{axis}[ticks=none,xlabel=$x$,ylabel=$y$,domain=-2:2,view={0}{90}] 
\addplot3 [contour gnuplot={
    labels=false,
    number=5} ] {exp(-x^2-y^2)}; 
\end{axis}
 \end{tikzpicture}
\end{document}

答案1

一个例子渐近线代码。

编译于http://asymptote.ualberta.ca/

import graph;
import contour;

size(300,false);
pair a=(-2,-2),b=(2,2);
real f(real x, real y){ return exp(-x^2-y^2);}

// The gradient vector of f(x,y)
pair F(pair z)
{
  real x = z.x, y = z.y;
  return (-2*x*f(x,y),-2*y*f(x,y));
}
path vector(pair z) {return (0,0)--F(z);}
guide[][] g=contour(f,a,b,uniform(0,1,10),350);
guide[] G=concat(... g);
pen[] p={red, green, blue, orange, gray};
p.cyclic=true;
for (int i=0; i<G.length; ++i) draw(G[i],p[i]+0.8bp);

limits(a+(0.3,0.3),b-(0.3,0.3));
add(vectorfield(vector,a+(0.3,0.3),b-(0.3,0.3),15));
crop();
xaxis("$x$",BottomTop,LeftTicks(Size=4),above=true);
yaxis("$y$",LeftRight,RightTicks(Size=4),above=true);
shipout(bbox(mm,invisible));

在此处输入图片描述

相关内容