绘制两个啮合齿轮,其边界类似于相同振幅的正弦函数

绘制两个啮合齿轮,其边界类似于相同振幅的正弦函数

我正在寻找一个简单的代码来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}

在此处输入图片描述

相关内容