¿Cómo hago una curva de Bézier con puntos de control en pgfplots?

¿Cómo hago una curva de Bézier con puntos de control en pgfplots?

Me gustaría crear una curva de Bézier con puntos de control. No logro encontrar lo que quiero en el manual de pgfplots. Esperaba que alguien pudiera ayudarme.

Lo que me gustaría hacer es crear una curva uniendo piezas por partes definidas usando curvas de Bézier y puntos de control. Esto es para crear gráficas para estudiantes de cálculo donde les doy la gráfica de una función y ellos tienen que crear una gráfica de la derivada. Entonces, me gustaría poder controlar con precisión dónde se encuentran los puntos de inflexión, los extremos, etc.

Aquí hay un ejemplo, pero no tengo idea de qué está pasando o por qué los puntos se conectaron en el orden en que se conectaron.

\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}

Según entendí, lo que leí fue que las etiquetas [0]ayudarían a definir los puntos de control. Esperaba que esta curva se pareciera a una Sforma que comenzara (2,2)y terminara en (0,0)donde (0,2)estaban (2,0)los puntos de control.

Pensé que podría lograr esto con 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}

Pero pgfplots parece ignorar mi ruta por su cuadro delimitador.

Respuesta1

La característica patch type=cubic splineesperapuntos de interpolación, es decir, puntos que están en la curva. Elige la única spline cúbica que pasa por (= interpola) los cuatro puntos.

\draw ... controls <A> and <B> ..es la instrucción TikZ para operaciones de dibujo Bézier y hace lo que espera que haga.

En pgfplots, solo las coordenadas dentro de a \addplot ...;contribuyen a los límites del eje.

Parece que tienes dos opciones:

  1. utilizar una base de interpolación junto con pgfplotso
  2. confiar en una solución tikz pura con \draw .. controls ..(que, por cierto, se puede concatenar).

La solución 2. se puede dibujar dentro de un eje pgfplots; en este caso, los límites de los ejes deben indicarse usando xmin=-1,xmax=3,ymin=-1,ymax=3algo así:

\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}

ingrese la descripción de la imagen aquí

información relacionada