
¿Puedes guiarme para dibujar esta figura?
He dibujado varios coches con este código:
\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}
Respuesta1
Actualizar
Utilicé la biblioteca tikz ducks porque como verás tiene una variedad muy pintoresca de resultados y comandos para obtenerlos de forma aleatoria; Si ves su documentación verás todo el esfuerzo de sus autores en generar todo eso, tal vez alguien algún día haga algo similar con vehículos y otras cosas y solo por amor o lo que sea a TeX, pero principalmente para hacer un MWE, que significa que copias el código, lo pegas en tu compilador y si tienes todos los paquetes, sí o sí, te dará un resultado con quizás algunas advertencias.
Por supuesto, como sugiere FZH, lo fácil es incluir archivos externos, tal como el ejemplo que citó, pero como para que todo luzca bien requiere manejar ciertos detalles, al principio estarán en un nodo y por eso es importante el punto de anclaje. , luego que todas las imágenes estén en la misma escala, para que puedas definirlas con un ancho específico, para esto es recomendable buscar en internet archivos vectoriales gratis editar en inkscape, separar lo que necesites, cortar el lienzo a el tamaño mínimo del vector, exportar a pdf,png o jpg; pdf es mejor porque mantiene los vectores.
Para poder compilar lo siguiente debes descargar los 4 PDF de esteenlace, CAR-1.pdf, CAR-2.pdf, .. etc hay más archivos pero son de uso gratuito, ya que son copias de copias, también está el svg original de donde los saqué... siguiente guardar ellos en el mismo directorio donde tiene su archivo tex. Como puedes ver, puedes reemplazarlos con lo que quieras con el nombre de archivo respectivo para que el compilador pueda encontrarlos.
RESULTADO:
CÓDIGO: (para compilarlo necesitas 4 archivos externos en el mismo directorio main.tex)
\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}
Original
Bueno, a veces sucede que socialmente hay que conmover a las personas de manera más efectiva, para que no piensen que es un caso típico de "hazlo por mí", por eso debes centrar las preguntas en casos particulares y tratar de aislar. ellos, por supuesto. Así que aunque busques encontrarás fragmentos de código que puedes adaptar, bueno no es tan fácil si aún no entiendes mucho, pero bueno..., como tenía los códigos para hacerlo, aquí te pongo una solución que Al menos completa el tema de las flechas.
Flechas azules de:Cómo dibujar un diagrama de flujo bonito y complejo (combinando tabla y diagrama de flujo)
flechas curvas negras de:Agregar flecha al código Helix
RESULTADO:
MWE:
\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}