你能指导我画这个图形吗?
我用这个代码画了几辆车:
\documentclass[border=10pt]{standalone}
\usepackage{tikz}
\tikzset{
pics/my car/.style={
code={
\tikzset{my car/.cd, #1}
\shade[my car/car color, shading angle={135},
draw=black, rounded corners=1.2ex, very thick]
(1.5,.5) -- ++(0,1) -- ++(1,0.3) -- ++(3,0) -- ++(1,0)
-- ++(0,-1.3) -- (1.5,.5) -- cycle;
\draw[very thick, rounded corners=0.5ex, fill=black!20!blue!20!white, thick]
(2.5,1.8) -- ++(1,0.7) -- ++(1.6,0) -- ++(0.6,-0.7) -- (2.5,1.8);
\draw[thick] (4.2,1.8) -- (4.2,2.5);
\draw[fill=gray!50, thick]
(2.75,.5) circle[radius=.5cm]
(5.5,.5) circle[radius=.5cm];
\draw[fill=gray!80, semithick]
(2.75,.5) circle[radius=.4cm]
(5.5,.5) circle[radius=.4cm];
\coordinate (-front) at (1.5,1);
\coordinate (-back) at (6.5,1);
\coordinate (-top) at (4.25,2.5);
\coordinate (-bottom) at (4.25,0);
}
},
my car/car color/.style={
top color=red, bottom color=white
}
}
\begin{document}
\begin{tikzpicture}
\pic (car 1) at (0,0) {my car};
\pic (car 2) at (10,0) {my car={car color/.append style={top color=blue}}};
\pic (car 3) at (20,0) {my car={car color/.append style={top color=green}}};
\pic (car 4) at (30,0) {my car={car color/.append style={top color=black}}};
%\draw[<-, shorten <=5pt, shorten >=5pt, ultra thick]
% (car 1-back) -- (car 2-front);
\draw[line width=5pt][<-, shorten <=5pt, shorten >=5pt]
(car 1-top) to[out=90, in=90] (car 2-top);
\draw[line width=5pt][<-, shorten <=5pt, shorten >=5pt]
(car 2-top) to[out=90, in=90] (car 3-top);
\draw[line width=5pt][<-, shorten <=5pt, shorten >=5pt]
(car 3-top) to[out=90, in=90] (car 4-top);
\end{tikzpicture}
\end{document}
答案1
更新
我使用了 tikz ducks 库,因为如你所见,它具有非常生动的各种结果和命令来随机获取它们;如果你查看它的文档,你会看到它的作者为生成所有这些所做的所有努力,也许有一天有人会对车辆和其他东西做类似的事情,只是出于对 TeX 的热爱或其他什么,但主要是为了制作 MWE,这意味着你复制代码,将其粘贴到你的编译器中,如果你拥有所有的包,是或是,它会给你一个结果,也许还有一些警告。
当然,正如 FZH 所建议的,简单的方法是包含外部文件,就像他引用的例子一样,但由于一切看起来不错都需要处理某些细节,首先它们将位于一个节点中,因此锚点很重要,然后所有图像都在相同的比例上,以便您可以用特定的宽度定义它们,为此建议在互联网上搜索免费的矢量文件在 inkscape 中编辑,分离您需要的内容,将画布剪切为最小矢量尺寸,导出为 pdf、png 或 jpg;pdf 更好,因为它保留了矢量。
为了编写以下内容,您必须从此处下载 4 个 PDF关联、CAR-1.pdf、CAR-2.pdf 等还有更多文件,但可以免费使用,因为它们是副本的副本,还有我从中获取它们的原始 svg...接下来将它们保存在与 tex 文件相同的目录中。如您所见,您可以用相应的文件名将它们替换为您想要的任何内容,以便编译器可以找到它们。
结果:
代码:(要编译它,您需要同一个 main.tex 目录中的 4 个外部文件)
\documentclass[tikz,border=3.14mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{calc,arrows.meta,backgrounds,decorations.markings}
\begin{document}
\begin{tikzpicture}[%Here you can define some tikz picture enviroment options
font=\sf\scriptsize,%set al fonts of this environment \sf=serif family, and size of text
Arrow/.style 2 args= {%Custom style arrow named Arrow, that has 2 arguments
draw=#1,%Option draw=color, #1 is the first argument
>={Triangle[angle=120:.5cm 0.3,scale length=0.5*#2,scale width=0.3*#2]},%It uses arrows meta arrow personalization, check visual tikz normal definition is ->
line width=#2*1.2mm
},
ArrowColor/.store in=\ArrowColor,ArrowColor=black,%Some variable to use in other styles below
ArCorr/.store in=\ArCorr,ArCorr=1.5, %Some variable to use in other styles below
Thickness/.store in=\Thickness,Thickness=4pt,%Some variable to use in other styles below
W/.store in=\W,W=5mm,%Some variable to use in other styles below
Arrow2/.style={%custom style arrow using decoratins markings.
draw=none,
postaction={
decorate,
decoration={
markings,
mark= at position 0 %this draw will be the first mark at the start of the path
with {%Mark drawing definition
\begin{scope}[yscale=#1]%All is in scope to mirror it using the default argument #1, using as Arrow2=-1 or 1
\pgfmathparse{int(\pgfdecoratedpathlength/4)}%Obtain the leght of the path
\edef\H{\pgfmathresult/15}%Then adjuts to mach the size of coordinates to the lenght of the path.
\fill[fill=\ArrowColor]
(0,0)
to [out=90-15, in=180] (\H,\W/1.5) coordinate (b)
-- ++(\Thickness,0) -- ++(0,-1pt)
to [out=180, in=90-15] (\Thickness,0)
-- (0,0);
\end{scope}
}
}
},
postaction={
decorate,
decoration={
markings,
mark=at position 1 %this draw will be the last mark at the end of the path
with {
\begin{scope}[yscale=#1]%idem
\pgfmathparse{int(\pgfdecoratedpathlength/4)}%idem
\edef\H{\pgfmathresult/15}%idem
\fill[fill=\ArrowColor]
(b) %uses previos coodinate to draw in the marck
to [out=0, in=90+20] (\Thickness/2,\Thickness*\ArCorr/1.5)
-- (\Thickness*\ArCorr,\Thickness*\ArCorr/1.5)
-- (0,0)
-- (-\Thickness*\ArCorr,\Thickness*\ArCorr/1.5)
-- (-\Thickness/2,\Thickness*\ArCorr/1.5)
to [out=90+20, in=0] ($(b)+(0,-1pt)$)
-- (b);
\end{scope}
}
}
}
}
]
%Creating a weel for all cars
\def\Weel#1{%\Weel{position}
\draw[fill=white,shift={(#1)}](0,0)circle (0.3);
\draw[fill=black!80, even odd rule,shift={(#1)}](0,0) circle (.3) circle (0.2);
\draw[fill,shift={(#1)}](0,0) circle (0.08);
\foreach \i in {1,...,12}{\draw[fill,shift={(#1)}](30*\i:0.1)--(30*\i:0.2)--+(90+30*\i:0.02);}
}
% drawing the Cars from external archives, you may include vectors (svg for example) if you convert them to pdf format.
\draw(0,0) node[anchor=-90](CAR-1){\includegraphics[width=3cm]{CAR-1.pdf}}; %\draw(position) node [node options](node_name){\includegraphics[graphic options]{imagefile}}
\draw($(CAR-1.-90)+(4.5,0)$) node[anchor=-90](CAR-2){\includegraphics[width=3cm]{CAR-2.pdf}};
\draw($(CAR-2.-90)+(4.5,0)$) node[anchor=-90](CAR-3){\includegraphics[width=3cm]{CAR-3.pdf}};
\draw($(CAR-3.-90)+(4.5,0)$) node[anchor=-90](CAR-4){\includegraphics[width=3cm]{CAR-4.pdf}};
\draw($(CAR-4.-90)+(3,0)$) node[scale=3]{$\dots$};
\draw($(CAR-4.-90)+(6,1)$) node[scale=2.5, draw, thick](L){\scriptsize Leader};
\Weel{$(L)+(-0.8,-0.7)$}
\Weel{$(L)+(0.8,-0.7)$}
\draw($(CAR-2)+(0,4)$) node[scale=2.5, draw, thick](C){\scriptsize Controller l};
%Drawing some Arrows
\draw[Arrow={cyan!40!blue}{1.2},->](CAR-1.120) |- ($(C)+(-1,2)$) -| (C.150);% |:vertical -:horizontal
\draw[Arrow={cyan!40!blue}{1.2},->](CAR-2.120) coordinate (temp) -- (C.-90-|temp);% node_coord intersectión perpendicular tipe (-| or |-)
\draw[Arrow={cyan!40!blue}{1.2},->]($(L.90)+(0,0.5em)$) |- ($(C)+(1,2)$) -| (C.120);
\draw[Arrow={cyan!40!blue}{1.2},->](CAR-4.120) |- ($(C)+(1,1.5)$) -| (C.60);
\draw[Arrow={cyan!40!blue}{1.2},->](CAR-3.120) |- ($(C)+(1,1)$) -| (C.30);
%Drawing some repetitive things
\foreach \txbehind/\Car [count=\j from 1]in {
i+1/CAR-1,
node\quad i/CAR-2,
i-1/CAR-3,
i-2/CAR-4,
0/L%<-necessary
}{
\path($(CAR-1.-90)+(0,-0.2)$)coordinate (temp) -- (temp-|\Car.-90) node []{$\txbehind$};
\ifnum\j<5\draw[Arrow={cyan!40!blue}{1},->]($(\Car.90)+(0,1)$) -- ++(0,-1)node [pos=0.1, anchor=-180]{$U_{\txbehind}$};\fi
\ifnum\j<4{}\draw[Arrow={red}{1},->](\Car.15) -- ++(0.75,0)node [midway, anchor=90]{$V_{\txbehind}$};\fi
}
\draw[Arrow2=-1,ArrowColor=black,Thickness=2mm,W=1.5cm,ArCorr=1.5] (CAR-2.140) -- (CAR-1.40);
\draw(b)++(0,0.7em) node {$\tilde{U}_{i+1}$}; %notice that b node is defined in the marking style
\draw[Arrow2=-1,ArrowColor=black,Thickness=2mm,W=1.5cm,ArCorr=1.5] (CAR-3.140) -- (CAR-2.40);
\draw(b)++(0,0.7em) node {$\tilde{U}_i$}; %the b position is rewritten by the previous instruction
\draw[Arrow2=-1,ArrowColor=black,Thickness=2mm,W=1.5cm,ArCorr=1.5] (CAR-4.140) -- (CAR-3.40);
\draw(b)++(0,0.7em) node {$\tilde{U}_{i-1}$};%ditto
\draw[dashed,green!50!black](CAR-2.south east)--++(0,-1) coordinate (temp1);
\draw[dashed,green!50!black](CAR-3.south west)--++(0,-1) coordinate (temp2);%
\draw[Arrow={green!50!black}{1},<->]($(temp1)+(0,1.5em)$)coordinate (temp) -- (temp -| temp2) node [midway, anchor=90]{$d_{i}$};
\end{tikzpicture}
\end{document}
原来的
嗯,有时在社交方面,你必须更有效地打动人们,这样他们才不会认为这是一个典型的“为我做”的案例,这就是为什么你应该把问题集中在特定案例上,并试图将它们隔离开来。所以即使你搜索,你也会找到可以改编的代码片段,如果你仍然不太明白的话,那就没那么容易了,但是好吧……,因为我有代码可以做到这一点,所以我在这里提出了一个解决方案,至少可以完成箭头问题。
蓝色箭头来自:如何绘制漂亮而复杂的流程图(结合表格和流程图)
黑色弯曲箭头来自:将箭头添加到 Helix 代码
结果:
梅威瑟:
\documentclass[tikz,border=3.14mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{calc,arrows.meta,ducks,decorations.markings}
\begin{document}
\begin{tikzpicture}[
>=Triangle,
font=\sf\scriptsize,
Arrow/.style 2 args= {draw=#1,-{Triangle[angle=120:.5cm 0.3,scale length=0.5*#2,scale width=0.3*#2]},line width=#2*1.2mm},
CoilColor/.store in=\coilcolor,CoilColor=black,
ArCorr/.store in=\ArCorr,ArCorr=1.5,
Thickness/.store in=\Thickness,Thickness=4pt,
W/.store in=\W,W=5mm,
Arrow2/.style={
draw=none,
postaction={
decorate,
decoration={
markings,
mark= at position 0
with {
\begin{scope}[yscale=#1]
\pgfmathparse{int(\pgfdecoratedpathlength/4)}
\edef\H{\pgfmathresult/15}
\fill[fill=\coilcolor!50!black]
(0,0)
to [out=90-15, in=180] (\H,\W/1.5) coordinate (b)
-- ++(\Thickness,0) -- ++(0,-1pt) coordinate (c)
to [out=180, in=90-15] (\Thickness,0)
-- (0,0);
\end{scope}
}
}
},
postaction={
decorate,
decoration={
markings,
mark=at position 1
with {
\begin{scope}[yscale=#1]
\pgfmathparse{int(\pgfdecoratedpathlength/4)}
\edef\H{\pgfmathresult/15}
\fill[fill=\coilcolor]
(b)
to [out=0, in=90+20] (\Thickness/2,\Thickness*\ArCorr/1.5)
-- (\Thickness*\ArCorr,\Thickness*\ArCorr/1.5)
-- (0,0)
-- (-\Thickness*\ArCorr,\Thickness*\ArCorr/1.5)
-- (-\Thickness/2,\Thickness*\ArCorr/1.5)
to [out=90+20, in=0] ($(b)+(0,-1pt)$)
-- (b);
\end{scope}
}
}
}
}
]
%Creating a weel for all cars
\def\Weel#1{%\Weel{position}
\draw[fill=white,shift={(#1)}](0,0)circle (0.3);
\draw[fill=black!80, even odd rule,shift={(#1)}](0,0) circle (.3) circle (0.2);
\draw[fill,shift={(#1)}](0,0) circle (0.08);
\foreach \i in {1,...,12}{\draw[fill,shift={(#1)}](30*\i:0.1)--(30*\i:0.2)--+(90+30*\i:0.02);}
}
\def\DuckCar#1#2#3#4[#5]{ %\OrigCAr{position}{orientation~restrcited~values~1~or~-1}{rotation}{color}[ID]
\begin{scope}[shift={(#1)},xscale=#2,rotate=#3]
\draw(0,0) coordinate (#5);
\draw(0,2.2) node[minimum width=5em](#5-top){};%<--Added a point on top named nodename-top
\shuffleducks\duck[\randomhead,scale=0.8,xshift=-3em,yshift=0.5em];
\Weel{0.6,0.3}
\Weel{-0.6,0.3}
\ifnum#2=-1{\draw(0,0)++(0,2em)node[draw, rounded corners, rotate=-#3, font=\sf\tiny]{#5};}\fi
\ifnum#2=1{\draw(0,0)++(0,2em)node[draw, rounded corners, rotate=#3, font=\sf\tiny]{#5};}\fi
\end{scope}
}
% drawing the Cars
\DuckCar{0,0}{-1}{0}{}[CAR-1]
\DuckCar{$(CAR-1)+(4,0)$}{-1}{0}{}[CAR-2]
\DuckCar{$(CAR-2)+(4,0)$}{-1}{0}{}[CAR-3]
\DuckCar{$(CAR-3)+(4,0)$}{-1}{0}{}[CAR-4]
\draw($(CAR-4)+(3,0)$) node[scale=3]{$\dots$};
\draw($(CAR-4)+(6,1)$) node[scale=2.5, draw, thick](L){\scriptsize Leader};
\Weel{$(L)+(-0.8,-0.7)$}
\Weel{$(L)+(0.8,-0.7)$}
\draw($(CAR-2)+(0,4)$) node[scale=2.5, draw, thick](C){\scriptsize Controller l};
%Drawing some Arrows
\draw[Arrow={cyan!40!blue}{1.2}](CAR-1-top.150) |- ($(C)+(-1,2)$) -| (C.150);
\draw[Arrow={cyan!40!blue}{1.2}](CAR-2-top.150) coordinate (temp) -- (C.-90-|temp);
\draw[Arrow={cyan!40!blue}{1.2}]($(L.90)+(0,0.5em)$) |- ($(C)+(1,2)$) -| (C.120);
\draw[Arrow={cyan!40!blue}{1.2}](CAR-4-top.150) |- ($(C)+(1,1.5)$) -| (C.60);
\draw[Arrow={cyan!40!blue}{1.2}](CAR-3-top.150) |- ($(C)+(1,1)$) -| (C.30);
%Drawing some repetitive things
\foreach \txbehind/\Car [count=\j from 1]in {
i+1/CAR-1,
node\quad i/CAR-2,
i-1/CAR-3,
i-2/CAR-4,
0/L%
}{
\path($(CAR-1)+(0,-0.5)$)coordinate (temp) -- (temp-|\Car.-90) node []{$\txbehind$};
\ifnum\j<5\draw[Arrow={cyan!40!blue}{1}]($(\Car-top.30)+(0,1)$) -- ++(0,-1)node [midway, anchor=-180]{$U_{\txbehind}$};\fi
\ifnum\j<4{}\draw[Arrow={red}{1}]($(\Car)+(1.25,0.5)$) -- ++(0.75,0)node [midway, anchor=90]{$V_{\txbehind}$};\fi
}
\draw[Arrow2=-1,CoilColor=black,Thickness=2mm,W=1.5cm,ArCorr=1.5] ($(CAR-2)+(-0.4,1.5)$) -- ($(CAR-1)+(0.8,1.5)$);
\draw(b)++(0,0.7em) node {$\tilde{U}_{i+1}$};
\draw[Arrow2=-1,CoilColor=black,Thickness=2mm,W=1.5cm,ArCorr=1.5] ($(CAR-3)+(-0.4,1.5)$) -- ($(CAR-2)+(0.8,1.5)$);
\draw(b)++(0,0.7em) node {$\tilde{U}_i$};
\draw[Arrow2=-1,CoilColor=black,Thickness=2mm,W=1.5cm,ArCorr=1.5] ($(CAR-4)+(-0.4,1.5)$) -- ($(CAR-3)+(0.8,1.5)$);
\draw(b)++(0,0.7em) node {$\tilde{U}_{i-1}$};
\end{tikzpicture}
\end{document}