绘制衍射光栅

绘制衍射光栅

在此处输入图片描述

我是 tikz 新手,画这个图时遇到了麻烦。我该怎么做?

答案1

tikz您可以使用和库来制作类似以下等距视图3d。我为“Red”和“Pantalla”制作了一个宏,因为它们是相同的图形,但尺寸(和颜色)不同,其余的是线、圆和弧,每个都在用库(选项)\newcommand定义的平面上。3dcanvas is...

\documentclass[border=2mm]{standalone}
\usepackage    {tikz}
\usetikzlibrary{3d}    % For "canvas is..." options
\usetikzlibrary{babel} % There are conflicts between tikz and some babel packages

% isometric axes
\pgfmathsetmacro\yx{1/sqrt(2)}
\pgfmathsetmacro\yy{1/sqrt(6)}
\pgfmathsetmacro\xy{sqrt(2/3)}

\newcommand{\rectangle}[6]% position (z), x,y,z dimensions, color, label 
{%
  \draw[canvas is xy plane at z=#1,fill=#5,fill opacity=0.8] (-#2,-#3)   rectangle (#2,#3);
  \draw[canvas is xz plane at y=#3,fill=#5]                  (-#2,#1-#4) rectangle (#2,#1);
  \draw[canvas is yz plane at x=#2,fill=#5]                  (-#3,#1-#4) rectangle (#3,#1);
  \node at (#2,-#3,#1) [above left,rotate=30] {#6};
}
\begin{document}
\begin{tikzpicture}[line cap=round,line join=round,%
                    x={(0 cm,\xy cm)},y={(-\yx cm,-\yy cm)},z={(\yx cm,-\yy cm)}]
% Dimensions
\def\pr{0.2} % Puntero, radius
\def\ph{2}   % Puntero, height
\def\rz{5}   % Red, position (z)
\def\ra{1.5} % Red, semi-dimension x
\def\rb{1.7} % Red, semi-dimension y
\def\rc{0.1} % Red, dimension z
\def\pz{10}  % Pantalla, postion (z)
\def\pa{\ra} % Pantalla, semi-dimension x
\def\pb{3}   % Pantalla, semi-dimension y
\def\pc{0.1} % Pantalla, dimension z
% Puntero
\draw[top color=gray] (-45:\pr)     --++ (0,0,\ph)  node[sloped,midway,above] {Puntero}
                  arc (-45:135:\pr) --++ (0,0,-\ph) arc (135:-45:\pr);
\draw[canvas is xy plane at z=\ph,fill=white] (0,0) circle (\pr);
% Single ray
\draw[red,thick] (0,0,\ph) -- (0,0,\rz);
% Red
\rectangle{\rz}{\ra}{\rb}{\rc}{brown!30}{Red}
% Triple rays
\foreach\i in {-1,0,1}
{%
  \draw[red,thick] (0,0,\rz) -- (0,0.5*\pb*\i,\pz);
}
% Pantalla
\rectangle{\pz}{\pa}{\pb}{\pc}{white}{Pantalla}
\begin{scope}[canvas is xy plane at z=\pz]
  \foreach\i in {-1,0,1}
  {%
    \draw[dashed] (0,0.5*\pb*\i) --++   (-1.5*\pa,0);
    \fill[red]    (0,0.5*\pb*\i) circle (2pt);
    \ifnum \i < 1
       \draw[<->] (-1.5*\pa,0.5*\pb*\i) --++ (0,0.5*\pb) node [midway,below] {$z$};
    \fi
  }
\end{scope}
\draw[dashed] (-\ra,\rb,\rz-0.5*\rc)   -- (-\ra,\pb+1,\rz-0.5*\rc);
\draw[dashed] (-\pa,\pb,\pz-0.5*\rc)   -- (-\pa,\pb+1,\pz-0.5*\pc);
\draw[<->]    (-\ra,\pb+1,\rz-0.5*\rc) -- (-\pa,\pb+1,\pz-0.5*\pc) node[midway,below] {$D$};
\node at (0,0,\pz) [above] {$O$};
\end{tikzpicture}
\end{document}

在此处输入图片描述

附言:正如 SebGlav 所评论的那样,我假设“红色”平面和“Pantalla”平面必须是平行的。

答案2

只是为了好玩而创建的马查....它与你的图片非常接近。这是一件独一无二的作品。:-)

\documentclass[a4paper,12pt]{article}
\usepackage{tikz}


\begin{document}
% Gradient Info
  
\tikzset {_xxxnodc6j/.code = {\pgfsetadditionalshadetransform{ \pgftransformshift{\pgfpoint{0 bp } { 0 bp }  }  \pgftransformrotate{0 }  \pgftransformscale{2 }  }}}
\pgfdeclarehorizontalshading{_n765rn7ok}{150bp}{rgb(0bp)=(1,1,1);
rgb(37.5bp)=(1,1,1);
rgb(45.24972098214286bp)=(0.73,0.71,0.71);
rgb(56.339285714285715bp)=(0.95,0.95,0.95);
rgb(62.5bp)=(0.96,0.96,0.96);
rgb(100bp)=(0.96,0.96,0.96)}
\tikzset{every picture/.style={line width=0.75pt}} %set default line width to 0.75pt        

\begin{tikzpicture}[x=0.75pt,y=0.75pt,yscale=-1,xscale=1]
%uncomment if require: \path (0,439); %set diagram left start at 0, and has height of 439

%Straight Lines [id:da14737216884669246] 
\draw  [dash pattern={on 0.84pt off 2.51pt}]  (411.5,291) -- (411.5,405) ;
%Straight Lines [id:da7656742806470096] 
\draw  [dash pattern={on 0.84pt off 2.51pt}]  (540.5,157.5) -- (540.5,271.5) ;
%Straight Lines [id:da2702625665256513] 
\draw  [dash pattern={on 0.84pt off 2.51pt}]  (478,219) -- (478,338.5) ;
%Straight Lines [id:da6484742549495406] 
\draw [color={rgb, 255:red, 208; green, 2; blue, 27 }  ,draw opacity=1 ][line width=1.5]    (101,199.71) -- (200,199.71) ;
%Shape: Cube [id:dp8551957300719828] 
\draw  [fill={rgb, 255:red, 224; green, 230; blue, 182 }  ,fill opacity=1 ] (173,174.33) -- (235.14,112.2) -- (239,112.2) -- (239,213.86) -- (176.86,276) -- (173,276) -- cycle ; \draw   (239,112.2) -- (176.86,174.33) -- (173,174.33) ; \draw   (176.86,174.33) -- (176.86,276) ;
%Shape: Can [id:dp07108459318332927] 
\path  [shading=_n765rn7ok,_xxxnodc6j] (104,207.43) -- (28,207.43) .. controls (26.34,207.43) and (25,204.42) .. (25,200.71) .. controls (25,197.01) and (26.34,194) .. (28,194) -- (104,194) .. controls (105.66,194) and (107,197.01) .. (107,200.71) .. controls (107,204.42) and (105.66,207.43) .. (104,207.43) .. controls (102.34,207.43) and (101,204.42) .. (101,200.71) .. controls (101,197.01) and (102.34,194) .. (104,194) ; % for fading 
 \draw  [color={rgb, 255:red, 0; green, 0; blue, 0 }  ,draw opacity=1 ] (104,207.43) -- (28,207.43) .. controls (26.34,207.43) and (25,204.42) .. (25,200.71) .. controls (25,197.01) and (26.34,194) .. (28,194) -- (104,194) .. controls (105.66,194) and (107,197.01) .. (107,200.71) .. controls (107,204.42) and (105.66,207.43) .. (104,207.43) .. controls (102.34,207.43) and (101,204.42) .. (101,200.71) .. controls (101,197.01) and (102.34,194) .. (104,194) ; % for border 

%Shape: Ellipse [id:dp43485916585372353] 
\draw  [color={rgb, 255:red, 208; green, 2; blue, 27 }  ,draw opacity=1 ] (206.07,190.93) .. controls (207.96,189.1) and (209.5,190.31) .. (209.5,193.62) .. controls (209.5,196.93) and (207.96,201.1) .. (206.07,202.93) .. controls (204.18,204.76) and (202.64,203.55) .. (202.64,200.24) .. controls (202.64,196.93) and (204.18,192.76) .. (206.07,190.93) -- cycle ;
%Straight Lines [id:da7472104356246656] 
\draw [color={rgb, 255:red, 208; green, 2; blue, 27 }  ,draw opacity=1 ][line width=1.5]    (206.07,196.93) -- (544,152) ;
%Straight Lines [id:da6874394911762671] 
\draw [color={rgb, 255:red, 208; green, 2; blue, 27 }  ,draw opacity=1 ][line width=1.5]    (206.07,196.93) -- (471,224) ;
%Straight Lines [id:da10191189772940112] 
\draw [color={rgb, 255:red, 208; green, 2; blue, 27 }  ,draw opacity=1 ][line width=1.5]    (407,290) -- (206.07,196.93) ;
%Shape: Cube [id:dp9219515675909264] 
\draw  [fill={rgb, 255:red, 255; green, 255; blue, 255 }  ,fill opacity=0.71 ] (393,181.02) -- (551.02,23) -- (556,23) -- (556,233.98) -- (397.98,392) -- (393,392) -- cycle ; \draw   (556,23) -- (397.98,181.02) -- (393,181.02) ; \draw   (397.98,181.02) -- (397.98,392) ;
%Shape: Circle [id:dp12691254054231815] 
\draw  [fill={rgb, 255:red, 208; green, 2; blue, 27 }  ,fill opacity=1 ] (536,153) .. controls (536,149.96) and (538.46,147.5) .. (541.5,147.5) .. controls (544.54,147.5) and (547,149.96) .. (547,153) .. controls (547,156.04) and (544.54,158.5) .. (541.5,158.5) .. controls (538.46,158.5) and (536,156.04) .. (536,153) -- cycle ;
%Straight Lines [id:da02978669418743607] 
\draw    (413.62,402.88) -- (475.88,340.62) ;
\draw [shift={(478,338.5)}, rotate = 495] [fill={rgb, 255:red, 0; green, 0; blue, 0 }  ][line width=0.08]  [draw opacity=0] (8.93,-4.29) -- (0,0) -- (8.93,4.29) -- cycle    ;
\draw [shift={(411.5,405)}, rotate = 315] [fill={rgb, 255:red, 0; green, 0; blue, 0 }  ][line width=0.08]  [draw opacity=0] (8.93,-4.29) -- (0,0) -- (8.93,4.29) -- cycle    ;
%Straight Lines [id:da2557715976074917] 
\draw    (482.12,333.38) -- (540.88,274.62) ;
\draw [shift={(543,272.5)}, rotate = 495] [fill={rgb, 255:red, 0; green, 0; blue, 0 }  ][line width=0.08]  [draw opacity=0] (8.93,-4.29) -- (0,0) -- (8.93,4.29) -- cycle    ;
\draw [shift={(480,335.5)}, rotate = 315] [fill={rgb, 255:red, 0; green, 0; blue, 0 }  ][line width=0.08]  [draw opacity=0] (8.93,-4.29) -- (0,0) -- (8.93,4.29) -- cycle    ;
%Straight Lines [id:da7574961163436977] 
\draw  [dash pattern={on 0.84pt off 2.51pt}]  (395.5,315) -- (395.5,429) ;
%Straight Lines [id:da0712410751453958] 
\draw  [dash pattern={on 0.84pt off 2.51pt}]  (173.98,265) -- (173.98,429) ;
%Straight Lines [id:da4806322026107146] 
\draw    (176.98,429) -- (392.5,429) ;
\draw [shift={(395.5,429)}, rotate = 180] [fill={rgb, 255:red, 0; green, 0; blue, 0 }  ][line width=0.08]  [draw opacity=0] (10.72,-5.15) -- (0,0) -- (10.72,5.15) -- (7.12,0) -- cycle    ;
\draw [shift={(173.98,429)}, rotate = 0] [fill={rgb, 255:red, 0; green, 0; blue, 0 }  ][line width=0.08]  [draw opacity=0] (10.72,-5.15) -- (0,0) -- (10.72,5.15) -- (7.12,0) -- cycle    ;
%Shape: Circle [id:dp4658659851312721] 
\draw  [fill={rgb, 255:red, 208; green, 2; blue, 27 }  ,fill opacity=1 ] (472,224) .. controls (472,220.96) and (474.46,218.5) .. (477.5,218.5) .. controls (480.54,218.5) and (483,220.96) .. (483,224) .. controls (483,227.04) and (480.54,229.5) .. (477.5,229.5) .. controls (474.46,229.5) and (472,227.04) .. (472,224) -- cycle ;
%Shape: Circle [id:dp5607627449126491] 
\draw  [fill={rgb, 255:red, 208; green, 2; blue, 27 }  ,fill opacity=1 ] (406,291) .. controls (406,287.96) and (408.46,285.5) .. (411.5,285.5) .. controls (414.54,285.5) and (417,287.96) .. (417,291) .. controls (417,294.04) and (414.54,296.5) .. (411.5,296.5) .. controls (408.46,296.5) and (406,294.04) .. (406,291) -- cycle ;

% Text Node
\draw (446.75,375.15) node [anchor=north west][inner sep=0.75pt]    {$Z$};
% Text Node
\draw (513.5,307.4) node [anchor=north west][inner sep=0.75pt]    {$Z$};
% Text Node
\draw (484.5,198.4) node [anchor=north west][inner sep=0.75pt]    {$O$};
% Text Node
\draw (169,112) node [anchor=north west][inner sep=0.75pt]   [align=left] {\textbf{{\large Red}}};
% Text Node
\draw (420,47) node [anchor=north west][inner sep=0.75pt]  [font=\large] [align=left] {\textbf{Pantalla}};
% Text Node
\draw (34,164) node [anchor=north west][inner sep=0.75pt]   [align=left] {\textbf{Puntero}};
% Text Node
\draw (284.75,405.15) node [anchor=north west][inner sep=0.75pt]    {$D$};


\end{tikzpicture}

\end{document}

在此处输入图片描述

相关内容