制御点付きのベジェ曲線を作成したいと思います。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
、補間点つまり、曲線上にある点です。4 つの点を通過する (= 補間する) 一意の 3 次スプラインを選択します。
\draw ... controls <A> and <B> ..
はベジェ描画操作用の TikZ 命令であり、期待どおりの動作を行います。
pgfplots では、\addplot ...;
軸の制限に寄与するのは内部の座標のみです。
2つの選択肢があるようです:
- 補間基底を一緒に使用する
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}