Como faço uma curva de Bézier com pontos de controle em pgfplots

Como faço uma curva de Bézier com pontos de controle em pgfplots

Gostaria de criar uma curva de Bézier com pontos de controle. Não estou tendo sucesso em encontrar o que quero no manual do pgfplots. Eu esperava que alguém pudesse me ajudar.

O que eu gostaria de fazer é criar uma curva unindo peças por partes definidas usando curvas de Bézier e pontos de controle. Isto é para criar gráficos para estudantes de cálculo onde eu lhes dou o gráfico de uma função e eles têm que criar um gráfico da derivada. Então, eu gostaria de poder controlar com precisão onde estão os pontos de inflexão, extremos, etc....

Aqui está um exemplo, mas não tenho ideia do que está acontecendo ou por que os pontos foram conectados na ordem em que foram conectados.

\documentclass[border=6pt]{standalone}
\usepackage{pgfplots}
\usepgfplotslibrary{patchplots}
\begin{document}

\begin{tikzpicture}
\begin{axis}[nodes near coords={(\coordindex)},
title={\texttt{patch type=cubic spline}}]
\addplot[
        mark=*,
        patch,
        patch type=cubic spline]
        coordinates {
        (2,2)        [0]
        (0,2)        [0]
        (2,0)        [0]
        (0,0)        [1]
};
\end{axis}
\end{tikzpicture}

\end{document}

Meu entendimento do que li foi que as tags [0]ajudariam a definir os pontos de controle. Eu esperava que essa curva se parecesse com uma Sforma começando (2,2)e terminando (0,0)onde (0,2)e (2,0)estavam os pontos de controle.

Eu pensei que poderia conseguir isso com algo como:

\documentclass[border=6pt]{standalone}
\usepackage{pgfplots}
\usepgfplotslibrary{patchplots}
\begin{document}

\begin{tikzpicture}
\begin{axis}
    [nodes near coords={(\coordindex)},
     title={\texttt{patch type=cubic spline}}
    ]

   \draw (axis cs:2,2) .. controls (axis cs:0,2) and (axis cs:2,0) .. (axis cs:0,0);

\end{axis}

\end{tikzpicture}

\end{document}

Mas o pgfplots parece ignorar meu caminho para sua caixa delimitadora.

Responder1

O recurso patch type=cubic splineesperapontos de interpolação, ou seja, pontos que estão na curva. Ele escolhe o spline cúbico único que passa (= interpola) os quatro pontos.

\draw ... controls <A> and <B> ..é a instrução TikZ para operações de desenho bezier e faz o que você espera que faça.

Em pgfplots, apenas as coordenadas dentro de \addplot ...;contribuem para os limites do eixo.

Parece que você tem duas opções:

  1. usar uma base interpoladora junto com pgfplotsou
  2. contar com uma solução tikz pura \draw .. controls ..(que pode ser concatenada, aliás).

Solução 2. pode ser desenhada dentro de um eixo pgfplots; neste caso, os limites dos eixos precisam ser fornecidos usando xmin=-1,xmax=3,ymin=-1,ymax=3ou algo parecido:

\documentclass[border=6pt]{standalone}
\usepackage{pgfplots}
\usepgfplotslibrary{patchplots}

% 1.11 does not need "axis cs:", i.e. (axis cs:2,2) is equivalent to (2,2)
\pgfplotsset{compat=1.11}
\begin{document}

\begin{tikzpicture}
\begin{axis}
    [
    title={\texttt{patch type=cubic spline}},
    xmin=-1,xmax=3,ymin=-1,ymax=3,
    ]


   \draw (2,2) .. controls (0,2) and (2,0) .. (0,0);

    \node at (2,2) {$0$};
    \node at (0,2) {$1$};
    \node at (2,0) {$2$};
    \node at (0,0) {$3$};

\end{axis}
\end{tikzpicture}

\end{document}

insira a descrição da imagem aqui

informação relacionada