我必须绘制一些参数曲线,像下面左边的曲线一样,我想添加小箭头来表示绘图的方向作为参数吨从 0 增加到 π。我知道如何postaction=decorate
像右例所示那样使用 在曲线上添加箭头,但这似乎不适用于 渲染的曲线\datavisualization
。还有其他方法吗?
本质上我只是想为左边的图配备那些蓝色箭头。
以下是我针对上图编写的代码:
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{arrows}
\usetikzlibrary{decorations.markings}
\usetikzlibrary{datavisualization}
\usetikzlibrary{datavisualization.formats.functions}
\begin{document}
\begin{tikzpicture}[decoration={markings,
mark=between positions 0 and 1 step 3mm
with { \arrow[blue]{>};}}]
% Decoration works here...
\draw[red,postaction=decorate] (2,0) to[out=-90,in=85] (4,0);
% ...but is ignored here.
\datavisualization[school book axes,
visualize as smooth line=f,
all axes={include value/.list={1,-1}},
f={style={red,postaction=decorate}}
]
data [format=function,set=f] {
var t : interval [0:pi] samples 50;
func x = cos(3 * \value{t}r) * cos(\value{t}r);
func y = cos(3 * \value{t}r) * sin(\value{t}r);
};
\end{tikzpicture}
\end{document}
编辑:两天后,我意识到我可以通过将函数分成几部分来解决这个问题,如下所示:
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{spy}
\usetikzlibrary{datavisualization}
\usetikzlibrary{datavisualization.formats.functions}
\begin{document}
\begin{tikzpicture}[spy using outlines={circle, magnification=5, size=1cm, connect spies}]
\foreach \i in {1,...,6}
\datavisualization[school book axes,
visualize as smooth line=f,
all axes={include value/.list={1,-1}},
f={style={red,->[blue]}}
]
data [format=function,set=f] {
var t : interval [pi*(\i-.5)/6:pi*(\i+.5)/6] samples 10;
func x = cos(3 * \value{t}r) * cos(\value{t}r);
func y = cos(3 * \value{t}r) * sin(\value{t}r);
};
\spy [green] on (.72,0.18) in node (zoom) at (.8, 1);
\end{tikzpicture}
\end{document}
但这有几个缺点:
- 将范围分解为六个部分实际上取决于我所绘制的函数,
- 我把这些轴画了 6 次,由于某种原因,这会产生更粗的轴,
- 因为箭头尖端不是平的,所以一个功能块的末端和下一个功能块的起点之间存在一些间隙(如间谍节点所示)。
答案1
运行xelatex
\documentclass{standalone}
\usepackage{pstricks-add}
\begin{document}
\psset{unit=5}
\begin{pspicture}(-1.1,-1.1)(1.2,1.2)
\psaxes[Dx=0.5,Dy=0.5]{->}(0,0)(-1.1,-1.1)(1.1,1.1)
\psparametricplot
[plotpoints=100,algebraic,linecolor=red,
linewidth=2pt]{0}{Pi}{cos(3*t) * cos(t) | cos(3*t) * sin(t) }
\multido{\rA=0.34+0.50}{6}{%
\psparametricplot
[plotpoints=2,algebraic,linecolor=blue,arrows=->,arrowscale=2,
linewidth=2pt]{\rA}{\rA\space 0.01 add}{cos(3*t) * cos(t) | cos(3*t) * sin(t) }}
\end{pspicture}
\end{document}