是否有一种简单的方法可以整体移动贝塞尔曲线,例如在 x 方向移动 2 厘米,在 y 方向移动 1 厘米,而不改变控制点?
\documentclass[11pt]{standalone}
\usepackage{tikz}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\draw (0,0) .. controls (1,1) and (2,-1) .. (3,0);
\end{tikzpicture}
\end{document}
xshift 和 yshift 键似乎不能用于此。谢谢
编辑:正如 Guilherme 指出的那样转移属性运作良好:
\documentclass[11pt]{standalone}
\usepackage{tikz}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\draw (0,0) .. controls (1,1) and (2,-1) .. (3,0);
\draw[shift={(2cm,1cm)}] (0,0) .. controls (1,1) and (2,-1) .. (3,0);
\end{tikzpicture}
\end{document}
但是,当您预先定义曲线的坐标时,它不起作用:
\documentclass[11pt]{standalone}
\usepackage{tikz}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\coordinate (A1) at (0,0);
\coordinate (A2) at (1,1);
\coordinate (A3) at (2,-1);
\coordinate (A4) at (3,0);
\draw (A1) .. controls (A2) and (A3) .. (A4);
\draw[shift={(2cm,1cm)}] (A1) .. controls (A2) and (A3) .. (A4);
\end{tikzpicture}
\end{document}
第二条曲线不会从其原始位置移动。
答案1
坐标没有移动,而是固定的(这是一件好事,通常这就是我们想要的)。您可以通过两种方式做到这一点:transform canvas={shift={(2cm,1cm)}}
而不仅仅是shift
。
或者你可以移动所有坐标:c/.style={shift={(2cm,1cm)}}
然后:
\draw[shift={(2cm,1cm)}] ([c]A1) .. controls ([c]A2) and ([c]A3) .. ([c]A4);
两种方法都可以,但第二种方法应该优先考虑,因为坐标系变换可能会造成意外的结果(如果你不知道该工具的作用,那么结果可能是意外的……)。
答案2
另一个想法(我不知道是否适合你的情况)是将所需的形状定义为pic
。在 内部,pic
您可以使用命名坐标来绘制形状,然后,当pic
用作绘图的一部分时,它可以轻松地移动、缩放或旋转:
\documentclass[11pt]{standalone}
\usepackage{tikz}
%\usepackage{pgfplots}
\tikzset{
mybezier/.pic = {
\coordinate (A1) at (0,0);
\coordinate (A2) at (1,1);
\coordinate (A3) at (2,-1);
\coordinate (A4) at (3,0);
\draw (A1) .. controls (A2) and (A3) .. (A4);
}
}
\begin{document}
\begin{tikzpicture}
\path (0,0) pic {mybezier};
\path (2,1) pic {mybezier};
\path (0,-1) pic[red, rotate=-30, scale=1.5] {mybezier};
\end{tikzpicture}
\end{document}
生成: