Рисование двух шестеренок в зацеплении с границами, напоминающими синусоидальные функции одинаковой амплитуды

Рисование двух шестеренок в зацеплении с границами, напоминающими синусоидальные функции одинаковой амплитуды

Я ищу простой код вTikZ рисования двух шестеренок в зацеплении, так чтобы зубья каждой шестерёнки были сделаны из синусоидальной функции, обернутой вокруг окружности. Большая шестерёнка должна быть окрашена в жёлтый цвет и иметь 50 зубцов, меньшая шестерёнка должна быть окрашена в красный цвет и иметь 10 зубцов. Зубья обеих шестерёнок должны иметь одинаковую амплитуду, которая составляет небольшую часть — может быть, одну восьмую — радиуса меньшей шестерёнки. Меньшая шестерёнка должна располагаться поверх большей шестерёнки, при этом углубление меньшей шестерёнки должно быть выровнено с зубцом большей шестерёнки.

У меня нет кода для этого. Ближайший код, который я нашел для того, что мне нужно, находится на следующем веб-сайте. Создание шестеренок в TikZ Но это не помогает.

У меня нет кода для обертывания 10 периодов синусоидальной функции по окружности.

решение1

Это определяет picдля шестерни. Он принимает параметры

  • количество зубцов n,
  • радиус внутреннего круга r1,
  • радиус шестерни r2,
  • амплитуда a.

Другие параметры, такие как цвет рисования, цвет заливки и преобразования, такие как повороты, можно передать параметрам pic. Я также добавил соотношение \Ratioшестеренок.

\documentclass[tikz,border=3mm]{standalone}
\begin{document}
\begin{tikzpicture}[pics/sinus gear/.style={code={
   \tikzset{gear/.cd,#1}
   \def\pv##1{\pgfkeysvalueof{/tikz/gear/##1}}
   \pgfmathtruncatemacro{\mymod}{360/\pv{n}}
   \draw[pic actions] 
    plot[variable=\t,domain=0:360,samples=12*\pv{n}+1,smooth cycle] 
    (\t:{\pv{r2}+\pv{a}*sin(\pv{n}*Mod(\t,\mymod))})
     (0,0) circle[radius=\pv{r1}];
    }},
    gear/.cd,r1/.initial=0.8cm,r2/.initial=1cm,n/.initial=12,a/.initial=0.1cm]
   \begin{scope}[local bounding box=gears]
    \def\Ratio{5}
    \path (0,0) pic[fill=orange!20,draw=orange,even odd rule]
        {sinus gear={n=10*\Ratio,r1=\Ratio*0.3cm,r2=\Ratio*0.5cm}} 
        (135:{(1+\Ratio)*0.5cm+\pgflinewidth}) 
        pic[fill=red!20,even odd rule,draw=red,rotate=90/\Ratio]{sinus
        gear={n=10,r1=0.3cm,r2=0.5cm}};
   \end{scope}  
\end{tikzpicture}
\end{document}

введите описание изображения здесь

Это обрезанная версия с разными цветами и внутренними радиусами (и стрелкой). Причина, по которой кто-то может захотеть обрезать ее, заключается в том, что тогда зубцы совпадают. Если вы хотите зубец вверх или вниз, вращайте шестерню на целое число, кратное 90/n, где n— количество зубцов.

\documentclass[tikz,border=3mm]{standalone}
\begin{document}
\begin{tikzpicture}[pics/sinus gear/.style={code={
   \tikzset{gear/.cd,#1}
   \def\pv##1{\pgfkeysvalueof{/tikz/gear/##1}}
   \pgfmathtruncatemacro{\mymod}{360/\pv{n}}
   \clip plot[variable=\t,domain=0:360,samples=12*\pv{n}+1,smooth cycle] 
    (\t:{\pv{r2}+\pv{a}*sin(\pv{n}*Mod(\t,\mymod))})
     (0,0) circle[radius=\pv{r1}];
   \draw[pic actions] 
    plot[variable=\t,domain=0:360,samples=12*\pv{n}+1,smooth cycle] 
    (\t:{\pv{r2}+\pv{a}*sin(\pv{n}*Mod(\t,\mymod))})
     (0,0) circle[radius=\pv{r1}];
    }},
    gear/.cd,r1/.initial=0.8cm,r2/.initial=1cm,n/.initial=12,a/.initial=0.1cm]
   \begin{scope}[local bounding box=gears]
    \def\Ratio{5}
    \path (0,0) pic[fill=yellow,draw=orange,ultra thick,even odd rule,rotate=90/50]
        {sinus gear={n=10*\Ratio,r1=\Ratio*0.3cm,r2=\Ratio*0.5cm}} 
        (90:{(1+\Ratio)*0.5cm}) 
        pic[fill=blue,even odd rule,draw=purple,ultra thick,
            rotate={90*(\Ratio+1)+\Ratio*90/50+18}]{sinus gear={n=10,r1=0.3cm,r2=0.5cm}};
    \draw[-latex,] (90:{(1+\Ratio)*0.5cm+\pgflinewidth}) 
    ++ (0,-0.8*0.3cm) -- ++(0,1.6*0.3cm);
   \end{scope}  
\end{tikzpicture}
\end{document}

введите описание изображения здесь

Анимированная версия.

\documentclass[tikz,border=3mm]{standalone}
\tikzset{pics/sinus gear/.style={code={
   \tikzset{gear/.cd,#1}
   \def\pv##1{\pgfkeysvalueof{/tikz/gear/##1}}
   \pgfmathtruncatemacro{\mymod}{360/\pv{n}}
   \draw[pic actions] 
    plot[variable=\t,domain=0:360,samples=12*\pv{n}+1,smooth cycle] 
    (\t:{\pv{r2}+\pv{a}*sin(\pv{n}*Mod(\t,\mymod))})
     (0,0) circle[radius=\pv{r1}];
    }},
    gear/.cd,r1/.initial=0.8cm,r2/.initial=1cm,n/.initial=12,a/.initial=0.1cm}
\begin{document}
\foreach \X in {1,...,36}
{\begin{tikzpicture}
    \path[use as bounding box] (-3.1,-2.6) rectangle (2.6,3.1);
    \def\Ratio{5}
    \path (0,0) pic[fill=orange!20,draw=orange,even odd rule,rotate=\X/\Ratio]
        {sinus gear={n=10*\Ratio,r1=\Ratio*0.3cm,r2=\Ratio*0.5cm}} 
        (135:{(1+\Ratio)*0.5cm+\pgflinewidth}) 
        pic[fill=red!20,even odd rule,draw=red,rotate=90/\Ratio-\X]{sinus
        gear={n=10,r1=0.3cm,r2=0.5cm}};  
\end{tikzpicture}}
\end{document}

введите описание изображения здесь

\documentclass[tikz,border=3mm]{standalone}
\tikzset{pics/sinus gear/.style={code={
   \tikzset{gear/.cd,#1}
   \def\pv##1{\pgfkeysvalueof{/tikz/gear/##1}}
   \pgfmathtruncatemacro{\mymod}{360/\pv{n}}
   \draw[pic actions] 
    plot[variable=\t,domain=0:360,samples=12*\pv{n}+1,smooth cycle] 
    (\t:{\pv{r2}+\pv{a}*sin(\pv{n}*Mod(\t,\mymod))})
     (0,0) circle[radius=\pv{r1}];
    }},
    gear/.cd,r1/.initial=0.8cm,r2/.initial=1cm,n/.initial=12,a/.initial=0.1cm}
\newsavebox\BigGear
\newsavebox\SmallGear
\def\Ratio{5}
\sbox\BigGear{\tikz{\pic[fill=orange!20,draw=orange,even odd rule]
        {sinus gear={n=10*\Ratio,r1=\Ratio*0.3cm,r2=\Ratio*0.5cm}};}}
\sbox\SmallGear{\tikz{\pic[fill=red!20,even odd rule,draw=red]{sinus
        gear={n=10,r1=0.3cm,r2=0.5cm}};}}
\begin{document}
\foreach \X in {1,...,90}
{\begin{tikzpicture}
    \path[use as bounding box] (-3.4,-3.4) rectangle (3.4,3.4);
    \path (0,0) node{\usebox\BigGear}
        (4*\X:{(1+\Ratio)*0.5cm+\pgflinewidth}) 
        node[rotate={4*(\Ratio+1)*\X}]{\usebox\SmallGear};
\end{tikzpicture}}
\end{document}

введите описание изображения здесь

Связанный контент