Como posso desenhar setas gradientes no iso-contour

Como posso desenhar setas gradientes no iso-contour

Usando pgfplots eu desenho o isocontorno de uma função f(x,y): linhas como f(x,y)=C com C um número escolhido.

Veja abaixo o exemplo com:

\documentclass{article}

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

\begin{document}

\begin{center}
    \begin{tikzpicture}[scale=0.85]
    \begin{axis}[   xmin=-4,xmax=12, ymin=-4,ymax=4,x=1cm,y=1cm,at={(-4cm,-4cm)}]]
    \addplot +[no markers,
    raw gnuplot,
    thick,dashed,
    empty line = jump, % not strictly necessary, as this is the default behaviour in the development version of PGFPlots
    ] gnuplot {
        set contour base;
        set cntrparam levels discrete -2,-1.1,-1.4;
        unset surface;
        set view map;
        set isosamples 500;
        set samples 500;
        splot -2/sqrt((x-7.5)^2+y^2)-3/sqrt((x-0.5)^2+y^2);
    };
    \end{axis}
    \end{tikzpicture}
\end{center}
\end{document}

isocontorno Posso desenhar os vetores gradientes em qualquer ponto, mas não sei como colocá-los em locais diferentes na curva de isocontorno.

insira a descrição da imagem aqui

Como eu poderia obter as posições de vários pontos naquela curva azul tracejada?

Responder1

Você pode usar o fato de poder acessar as coordenadas dos gráficos de contorno. Como se trata de vários segmentos desconectados, a especificação posnão é suficiente. Em vez disso, você também precisa usar pos segment, o que é explicado na pág. 358 do manual pgfplots v1.16. Contudo, não está claro a priori qual segmento possui qual índice. Para simplificar, adicionei um estilo que adiciona a seta gradiente, que é ortogonal à tangente do contorno neste ponto.

\documentclass{article}

\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\begin{document}

\begin{center}
 \begin{tikzpicture}[gradient arrow/.style={
 insert path={coordinate[pos=#1,sloped,
     above=\pgfkeysvalueof{/tikz/ga/above}]  (aux-1)
    coordinate[pos=#1,sloped,
     above=\pgfkeysvalueof{/tikz/ga/above}+\pgfkeysvalueof{/tikz/ga/length}] (aux-2)
    (aux-1) edge[/tikz/ga/arrow] 
    (aux-2)}},ga/.cd,
    above/.initial=3pt,
    length/.initial=12pt,
    arrow/.style={-stealth,black,solid,thick}]
  \begin{axis}[scale=0.85,xmin=-4,xmax=12, ymin=-4,ymax=4,x=1cm,y=1cm,at={(-4cm,-4cm)}]]
   \addplot +[no markers,name=contour,
    raw gnuplot,
    thick,dashed,
    empty line = jump, % not strictly necessary, as this is the default behaviour in the development version of PGFPlots
    ] gnuplot {
        set contour base;
        set cntrparam levels discrete -2,-1.1,-1.4;
        unset surface;
        set view map;
        set isosamples 500;
        set samples 500;
        splot -2/sqrt((x-7.5)^2+y^2)-3/sqrt((x-0.5)^2+y^2);
    } 
    [pos segment=1]
    [gradient arrow/.list={0.2,0.8}]
    [pos segment=3,/tikz/ga/arrow/.append style={red},/tikz/ga/length=10pt]
    [gradient arrow/.list={0.2,0.8}];
  \end{axis}
 \end{tikzpicture}
\end{center}
\end{document}

insira a descrição da imagem aqui

informação relacionada