Edit and compile if you like:
% Author: Izaak Neutelings (March 2019) \documentclass[border=3pt,tikz]{standalone} \usetikzlibrary{calc} \tikzset{>=latex} % for LaTeX arrow head \colorlet{knob}{blue!20!black!40} \colorlet{mylightblue}{blue!10} \colorlet{mydarkblue}{blue!30!black} \tikzstyle{arrow}=[->,very thick,mydarkblue] \tikzstyle{vector}=[->,line width=2,green!50!black] % ANGLE \newcommand{\getangle}[3]{% \pgfmathanglebetweenpoints{\pgfpointanchor{#2}{center}} {\pgfpointanchor{#3}{center}} \global\let#1\pgfmathresult } % ENGINE \def\gas{blue!10} \def\engine#1{ \def\R{2} \def\l{1} \def\L{4.6} \def\p{1.8} \def\P{3.2} \def\Ra{.35} % crankshaft \def\Rb{.6} % crankshaft \def\Rc{.2} % crankshaft \def\a{40} % wall \def\b{30} % rod \coordinate (O) at (0,0); \coordinate (CS) at (#1:\l); \coordinate (P) at (0,{\l*sin(#1)+sqrt(\P^2-(\l*cos(#1))^2)}); \coordinate (RL) at (180-\a:\R); \coordinate (RR) at (\a:\R); \coordinate (TL) at ($(RL)+(0,\L)$); \coordinate (TR) at ($(RR)+(0,\L)$); \coordinate (T) at ($(TL)!.5!(TR)$); \coordinate (PL) at ($(RL)+(0,{\l*(1.4+sin(#1))})$); \coordinate (PR) at ($(PL-|RR)+(0,\p)$); \coordinate (S) at ($(T)+(0,.8)$); \coordinate (VLo) at ($(TL)!.2!(S)$); \coordinate (VL) at ($(TL)!.4!(S)$); \coordinate (VLm) at ($(TL)!.6!(S)$); \coordinate (VRo) at ($(TR)!.2!(S)$); \coordinate (VR) at ($(TR)!.4!(S)$); \coordinate (VRm) at ($(TR)!.6!(S)$); \getangle{\c}{CS}{P} \getangle{\vl}{VLo}{VLm} \getangle{\vr}{VRo}{VRm} % GAS \fill[\gas,draw=white,line width=3] (PL) -| (TR) -- (S) -- (TL) -- cycle; % CRANKSHAFT \draw[thick,mydarkblue,top color=blue!30!black!40,bottom color=blue!30!black!10,shading angle=180] (O) ++ (180+#1:\Ra) to[out={-90+#1},in={180+#1},looseness=.8] ($(CS)+(-90+#1:\Rb)$) arc (-90+#1:90+#1:\Rb) to[out=180+#1,in=90+#1,looseness=.8] cycle; % ROD \draw[thick,mydarkblue,top color=blue!30!black!50,bottom color=blue!30!black!20,shading angle=\c] (CS) ++ (\c-\b:\Rb) arc (\c-\b:-360+\c+\b:\Rb) -- ($(P)+(\c+90:\Rc)$) -- ($(P)+(\c-90:\Rc)$) -- cycle; % PISTON \draw[mydarkblue,thick,top color=blue!20!black!30,bottom color=blue!20!black!30,middle color=blue!5,shading angle=90] (PL) rectangle (PR); \draw[thick,mydarkblue,fill=knob] (PL) ++ (0,.65*\p) rectangle ($(PR)+(0,-.25*\p)$); % DECORATION \draw[thick,mydarkblue,fill=knob] (O) circle (\Rc/2); \draw[thick,mydarkblue,fill=knob] (CS) circle (\Rc); \draw[thick,mydarkblue,fill=knob] (P) circle (\Rc); % WALL \wall } % WALL \def\wall{ \draw[line width=4,blue!10!black!50] (VRo) ++ (1.5,0.6) to[out=180,in=60] (VRo) -- (TR) -- %to[out=-30,in=90,looseness=0.5] (RR) arc (\a:-180-\a:\R) -- (TL) -- (VLo) to[out=110,in=0] ++ (-1.5,0.6); %to[out=90,in=200,looseness=0.8] \draw[line width=4,blue!10!black!50] (VLo) ++ (-1.5,1.3) to[out=0,in=110] (VLm) -- (S) -- (VRm) to[out=60,in=180] ($(VRo)+(1.5,1.3)$); \fill[blue!30!black!60] (S) ++ (.07,.2) to[out=90,in=-150]++ (1,1.4) -- ($(S)+(1,1.74)$) to[out=-150,in=90] ($(S)+(-.07,.2)$); \draw[blue!30!black!80] (S) ++ (.07,.2) to[out=90,in=-150]++ (1,1.4) (S) ++ (-.07,.2) to[out=90,in=-150]++ (1.07,1.54); \draw[blue!10!black,fill=blue!20!black] (S) ++ (-.09,-.16) --++ (.09,-.1) coordinate (X) --++ (.09,.1) -- cycle; \draw[blue!30!black,fill=blue!30!black!80] (S) ++ (-.1,-.15) --++ (.2,0) --++ (0,.35) --++ (-.2,0) -- cycle; } % VALVE \def\valveL#1{ \fill[thick,blue!20!black] (VLo) ++ (\vl-90:#1) -- ($(VLm)+(\vl-90:#1)$) -- ($(VLo)!.64!(VLm)+(\vl+90:.2-#1)$) --++ (\vl+90:2) -- ($(VLo)!.36!(VLm)+(\vl+90:2.2-#1)$) -- ($(VLo)!.36!(VLm)+(\vl+90:.2-#1)$) -- cycle; } % VALVE \def\valveR#1{ \fill[thick,blue!20!black] (VRo) ++ (\vr+90:#1) -- ($(VRm)+(\vr+90:#1)$) -- ($(VRo)!.64!(VRm)+(\vr-90:.2-#1)$) --++ (\vr-90:2) -- ($(VRo)!.36!(VRm)+(\vr-90:2.2-#1)$) -- ($(VRo)!.36!(VRm)+(\vr-90:.2-#1)$) -- cycle; } \begin{document} % INTAKE STROKE \begin{tikzpicture} \def\d{-60} \engine{10}; \draw[vector] (\d:.6*\R) arc (\d:\d-80:.55*\R); \fill[\gas] (VLo) to[out=110,in=0] ++ (-1.5,0.6) -- ($(VLo)+(-1.5,1.3)$) to[out=0,in=110] (VLm) to[out=\vl-90,in=\vl-90] cycle; \wall \valveL{.3} \valveR{.1} \draw[arrow] (VL) ++ (-.3,.2) --++ (-1,-.5) node[below left=-2,align=right,scale=1.4] {intake\\[-2pt]valve}; \draw[arrow] (VR) ++ (.3,.1) --++ (1,-.5) node[below right=-2,align=left,scale=1.4] {exhaust\\[-2pt]valve}; \draw[arrow] (O) ++ (-.5,.4) --++ (-1.8,.9) node[left=-20,above left=2,scale=1.4] {crankshaft}; \draw[arrow] (P) ++ (1.1,-.2) --++ (1.2,-.5) node[below right=-2,scale=1.4] {piston}; \draw[arrow] (S) ++ (150:.2) --++ (-.5,.7) node[above=-1,align=center,scale=1.4] {spark\\[-2pt]plug}; \end{tikzpicture} % COMPRESSION STROKE \begin{tikzpicture} \def\d{-10} \engine{-140}; \draw[vector] (\d:.6*\R) arc (\d:\d-80:.55*\R); \valveL{.1} \valveR{.1} \end{tikzpicture} % IGNITION \begin{tikzpicture} \def\d{40} \engine{90}; \draw[vector] (\d:.6*\R) arc (\d:\d-80:.55*\R); \valveL{.1} \valveR{.1} \draw[very thin,yellow!70!black,fill=yellow,shift={(X)}] ( -15:.20) -- ( -30:.40) -- ( -40:.25) -- ( -50:.40) -- ( -60:.22) -- ( -70:.40) -- ( -80:.20) -- ( -90:.45) -- (-100:.24) -- (-110:.40) -- (-120:.25) -- (-130:.40) -- (-140:.20) -- (-150:.45) -- (-165:.20) to[out=40,in=140] cycle; \end{tikzpicture} % POWER STROKE \def\gas{red!10} \begin{tikzpicture} \def\d{-60} \engine{10}; \draw[vector] (\d:.6*\R) arc (\d:\d-80:.55*\R); %\draw[vector] (P) ++ (-.7,-.9) --++ (0,-1.1); \valveL{.1} \valveR{.1} \end{tikzpicture} % EXHAUST STROKE \begin{tikzpicture} \def\d{-40} \engine{-190}; \draw[vector] (\d:.6*\R) arc (\d:\d-80:.55*\R); \fill[\gas] (VRo) to[out=60,in=-180] ++ (1.5,0.6) -- ($(VRo)+(1.5,1.3)$) to[out=180,in=60] (VRm) to[out=-270+\vr,in=-270+\vr] cycle; \wall \valveL{.1} \valveR{.3} \end{tikzpicture} \end{document}
Click to download: engine_combustion.tex • engine_combustion.pdf
Open in Overleaf: engine_combustion.tex