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}