Я хотел бы создать кривую Безье с контрольными точками. Я не могу найти то, что мне нужно, в руководстве 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 ...;
осей влияют на их пределы.
Похоже, у вас два варианта:
- использовать интерполяционную основу вместе с
pgfplots
или - положиться на чистое решение 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}