동일한 진폭의 정현파 함수와 유사한 경계를 사용하여 메쉬에 두 개의 기어 그리기

동일한 진폭의 정현파 함수와 유사한 경계를 사용하여 메쉬에 두 개의 기어 그리기

TikZ각 기어의 톱니바퀴가 원을 감싸는 정현파 함수로 만들어지도록 메쉬에 두 개의 기어를 그리는 간단한 코드를 찾고 있습니다 . 더 큰 기어는 노란색으로 표시되고 톱니가 50개 있고, 작은 기어는 빨간색으로 표시되고 톱니가 10개 있습니다. 두 기어의 톱니바퀴는 동일한 진폭을 가져야 하며, 이는 더 작은 기어 반경의 작은 부분(아마도 8분의 1)입니다. 더 작은 기어는 더 큰 기어 위에 위치하며 더 작은 기어의 우물은 더 큰 기어의 톱니바퀴와 정렬됩니다.

이에 대한 코드가 없습니다. 내가 원하는 것과 가장 가까운 코드는 다음 웹 사이트에 있습니다. 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}

여기에 이미지 설명을 입력하세요

관련 정보