Как создать кривую Безье с контрольными точками в pgfplots

Как создать кривую Безье с контрольными точками в pgfplots

Я хотел бы создать кривую Безье с контрольными точками. Я не могу найти то, что мне нужно, в руководстве pgfplots. Я надеялся, что кто-то сможет мне помочь.

Я хотел бы создать кривую, соединяя кусочные части, определенные с помощью кривых Безье и контрольных точек. Это делается для создания графиков для студентов, изучающих исчисление, где я даю им график функции, а они должны построить график производной. Поэтому я хотел бы иметь возможность точно контролировать, где находятся точки перегиба, экстремумы и т. д...

Вот пример, но я понятия не имею, что происходит и почему точки соединены именно в том порядке, в котором они были соединены.

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

Я понял, что теги [0]помогут определить контрольные точки. Я ожидал, что эта кривая будет выглядеть как Sформа, начинающаяся (2,2)и заканчивающаяся там, (0,0)где (0,2)и (2,0)были контрольные точки.

Я подумал, что смогу добиться этого с помощью чего-то вроде:

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

Но pgfplots, похоже, игнорирует мой путь для своей ограничивающей рамки.

решение1

Функция patch type=cubic splineожидаетточки интерполяции, т.е. точек, которые находятся на кривой. Он выбирает уникальный кубический сплайн, который проходит через (= интерполирует) четыре точки.

\draw ... controls <A> and <B> ..— это инструкция TikZ для операций рисования кривых Безье, и она делает то, что вы от нее ожидаете.

В pgfplots только координаты внутри границ \addplot ...;осей влияют на их пределы.

Похоже, у вас два варианта:

  1. использовать интерполяционную основу вместе с pgfplotsили
  2. положиться на чистое решение tikz \draw .. controls ..(которое, кстати, можно объединить).

Решение 2. можно нарисовать внутри оси pgfplots; в этом случае границы оси необходимо задать с помощью xmin=-1,xmax=3,ymin=-1,ymax=3или чего-то вроде этого:

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

введите описание изображения здесь

Связанный контент