在 tikz 中整体移动贝塞尔曲线

在 tikz 中整体移动贝塞尔曲线

是否有一种简单的方法可以整体移动贝塞尔曲线,例如在 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}

生成:

结果

相关内容