如何让图片在曲线上均匀分布?

如何让图片在曲线上均匀分布?

我想创建一个贝塞尔曲线形式的路径,并沿着路径均匀放置图片图形。在这个例子中,图片仅放置在曲线的最后两个点之间,并且分布不均匀,每个图片之间的间距也不相同。该怎么办?

\begin{tikzpicture}[cc/.pic={\draw[fill=cyan!10]circle[radius=10pt];}]
\draw[help lines](0,0)grid(16,6);
\draw(1,1)..controls(1,5)and(5,5)..(6,3)..controls(7,1)and(15,2)..(14,5)
foreach \t in {0,0.125,...,1}{
    pic[pos=\t]{cc}
};

\结束{tikzpicture}在此处输入图片描述

答案1

将坐标、节点和图片放置在直线或曲线上的 TikZ 算法明确地或者隐含地根据“计时器”并根据每个路径段进行操作,这意味着

\path (a) -- pic {cc} (b) -- pic {cc} (c);

(a)在和(b)中间放置一张图片。对于直线(b)(c)时间对应于起点和终点之间的分数距离,对于曲线,这是多变的

markings为了将元素均匀地分布在路径(或子路径)的距离上,decoration.markings图书馆必须使用(除非你想自己做数学计算)。

它提供了语法mark = at position pos with code位置可以是无单位分数或距离,也可以是语法。mark = between positions start pos and end pos step stepping with code

以下代码中均使用了这两种方法。由于 TeX 算法不是很精确,因此1需要手动调整位置,以便实际放置(步进 0.1249 或位置 0.999)。

我使用椭圆来显示标记沿路径旋转。


为了应用两种不同的标记,建议移动内部的装饰设置postaction

代码

\documentclass[tikz]{standalone}
%\documentclass{article}
%\usepackage{tikz}
\usetikzlibrary{decorations.markings}
\begin{document}
\begin{tikzpicture}[cc/.pic={\draw[fill=cyan!10]circle[radius=10pt];}]
\draw[help lines] (0,0) grid (16,6);
\draw (1,1) .. controls (1,5) and ( 5,5) .. ( 6,3)
            .. controls (7,1) and (15,2) .. (14,5)
  [
    postaction=decorate,
    decoration={
      name=markings,
      mark={
        between positions 0 and 1 step .1249 with
%        \pic {cc};
        \draw[fill=cyan!10] circle[y radius=5pt, x radius=10pt];
      }
    }
  ]
;
\end{tikzpicture}

\begin{tikzpicture}[
  CC/.style={
    decoration={
      name=markings,
      mark={
        at position #1 with
        \draw[fill=cyan!10] circle[y radius=5pt, x radius=10pt];
      }
    }
  }]
\draw[help lines] (0,0) grid (16,6);
\draw (1,1) .. controls (1,5) and ( 5,5) .. ( 6,3)
            .. controls (7,1) and (15,2) .. (14,5)
  [
    postaction=decorate,
    CC/.list={0, 0.125, 0.25, 0.375, 0.5, 0.625, 0.75, 0.875, .999}
  ]
;
\end{tikzpicture}
\begin{tikzpicture}[
  CC/.style 2 args={
    decorate, % moved inside here
    /utils/temp/.style={
      decoration={
        name=markings,
        mark={at position ##1 with \draw[fill=#1]circle[radius=10pt];}}},
    /utils/temp/.list={#2}},
  CP/.style={CC={pink!25}{#1}},
  CB/.style={CC={blue!25}{#1}},
]
\draw[help lines](0,0)grid(16,6);
\draw[% decoration styles moved inside the postaction
  postaction={CP={0, 0.1, 0.4, 0.5, 0.7, 0.9, 0.999}},
  postaction={CB={0.2, 0.3, 0.6, 0.8}}
]  (1,1) .. controls (1,5) and ( 5,5) .. ( 6,3)
         .. controls (7,1) and (15,2) .. (14,5);
\end{tikzpicture}
\end{document}

输出

在此处输入图片描述 在此处输入图片描述

相关内容