
안녕하세요 여러분, 즐거운 크리스마스 보내세요(늦었지만 ㅋㅋㅋ). 아래와 같은 양면 오목 렌즈를 그리고 싶지만 실제로는 불가능합니다.
이렇게 글을 쓰긴 했지만, 제가 원하는 결과는 아닙니다.
\documentclass[tikz,border=3mm]{standalone}
\begin{document}
\begin{tikzpicture}[scale=0.9]
\pgfmathsetmacro{\lensRadius}{2.6}
\pgfmathsetmacro{\lensHeight}{1.8}
\pgfmathsetmacro{\startAngle}{-asin(\lensHeight/\lensRadius)}
\draw [fill=lightgray!50, very thick] (0,\lensHeight)
arc[start angle=-\startAngle,delta
angle=2*\startAngle,radius=\lensRadius]
--++ (0:2)
arc[start angle=-\startAngle,delta angle=2*\startAngle,radius=-
\lensRadius]
-- cycle;
\end{tikzpicture}
\end{document}
답변1
이런 렌즈가 그려지네요. 반경을 다르게 선택할 수 있지만 물론 동일하게 설정할 수도 있습니다. 초점의 위치는 다음과 같이 계산됩니다.렌즈메이커 방정식. 매크로 대신 pgf 키가 사용됩니다. 매개변수는 높이 h
, 두께 d
, 굴절률 n
, 반경 R1
및 입니다 R2
. 매개변수는 alpha
청록색 파선의 기울기를 나타냅니다.
\documentclass[tikz,border=3mm]{standalone}
\begin{document}
\begin{tikzpicture}[bullet/.style={circle,black,fill,inner sep=1.8pt},
every label/.append style={black},
declare function={lensf(\n,\d,\Rone,\Rtwo)=1/(
(\n-1)*(1/\Rone-1/\Rtwo+(\n-1)*\d/(\n*\Rone*\Rtwo)));
startangle(\h,\r)=asin(\h/\r);},
lens/.cd,n/.initial=1.7,R1/.initial=3.6,R2/.initial=-3.9,d/.initial=0.6,
h/.initial=1.8,alpha/.initial=20]
%short cut
\def\pv#1{\pgfkeysvalueof{/tikz/lens/#1}}
\draw [fill=lightgray!50, very thick]
({-\pv{d}/2-cos(90-startangle(\pv{h},\pv{R1}))},\pv{h})
arc[start angle={startangle(\pv{h},\pv{R1})},delta
angle={-2*startangle(\pv{h},\pv{R1})},radius=\pv{R1}]
--++ ({\pv{d}+cos(90-startangle(\pv{h},\pv{R1}))+cos(90+startangle(\pv{h},\pv{R2}))},0)
arc[start angle={-startangle(\pv{h},\pv{R2})},delta
angle={2*startangle(\pv{h},\pv{R2})},radius=\pv{R2}]
-- cycle;
\draw[very thick,dashed] (0,-1.2*\pv{h}) -- (0,1.2*\pv{h});
\draw[very thick] (-1.2*\pv{R1}-\pv{d}/2,0) -- (-1.2*\pv{R2}+\pv{d}/2,0);
\draw[cyan,dashed,thick] ({-\pv{d}/2-\pv{R1}},0)
node[bullet,label=below:$C_1$]{}
-- node[sloped,above]{$R_1$} ++ (\pv{alpha}:\pv{R1});
\path ({-lensf(\pv{n},\pv{d},\pv{R1},\pv{R2})},0)
node[bullet,label=below:$F_2$]{};
\draw[cyan,dashed,thick] ({\pv{d}/2-1*\pv{R2}},0)
node[bullet,label=above:$C_2$]{}
-- node[sloped,below]{$R_2$} ++ (\pv{alpha}:\pv{R2});
\path ({lensf(\pv{n},\pv{d},-1*\pv{R2},-1*\pv{R1})},0)
node[bullet,label=above:$F_1$]{};
\end{tikzpicture}
\end{document}