5

I would like to reproduce following scientific diagram in a 1996 paper. An old-fashion scientific diagram

My questions:

(a) How did the author create such a figure? What software did he possibly used?

(b) Is it possible to do it using TikZ? If so, what is the general routine?

I appreciate your helps.

10
  • 6
    (a) Judging from the arrow tips and other imperfections, it looks like a hand-drawn sketch from the pre-PC era. (b) \begin{tikzpicture} drawing commands \end{tikzpicture}.
    – AlexG
    Oct 25, 2016 at 12:46
  • 1
    For 3d, start at the back and work foreward. Oct 25, 2016 at 14:13
  • 1
    tikz-3dplot can help with the calculations @Emma mentions. However, TikZ is not the most obvious choice for 3D as it can only ever fake it in 2D.
    – cfr
    Dec 10, 2016 at 16:46
  • 2
    This drawing is a technical drawing drawn in Chinese ink as we learned before the massive use of computers. But, the image that you show is certainly the result of a photocopy of photocopy, which systematically damages the layout and makes it approachable: the photocopiers do not reproduce perfectly: there are always traces slightly damaged. All you need to do to convince yourself is to make photocopies of photocopies and you will get the same effect. I'm sure the original is much cleaner than that.
    – AndréC
    Aug 25, 2018 at 5:28
  • 1
    @AndréC This is a really good point. Thanks for pointing it out.
    – WDC
    Aug 25, 2018 at 5:48

2 Answers 2

9

At least it works …

\documentclass[border=5pt,tikz]{standalone}
\usetikzlibrary{arrows,backgrounds,shapes.arrows,positioning}
\tikzset{arrownode/.style={
        transform shape nonlinear=true,
        shape=double arrow,
        shape border rotate=180,
        draw
    }
}
\begin{document}
    \begin{tikzpicture}[>=latex,every node/.style={font=\footnotesize}]
        \draw[->] (-1.5,0) -- (1.5,0) node[above] {$x$};
        \draw[->] (0,-1.5) -- (0,1.7) node[right] {$y$};
            \draw[xshift=.5cm,yshift=1cm] (0,0) rectangle (2,2);
                \draw[xshift=.5cm,yshift=1cm,white] (0,0) -- (0,2);
                \draw[xshift=.5cm,yshift=1cm,white] (0,0) -- (2,0);
                    \draw[xshift=.5cm,yshift=1cm,thick] (0,2) -- (2,2);
            \draw[fill=white,xshift=.5cm,yshift=1cm] (0,2) -- ([xshift=-.05cm,yshift=-.1cm]0,2) -- (1,1.8) -- ([xshift=-.05cm,yshift=-.1cm]2,2) -- (2,2);
            \draw[xshift=.5cm,yshift=1cm] ([xshift=-.05cm,yshift=-.1cm]2,2) -- ([xshift=-.15cm]2,1) -- ([xshift=-.05cm,yshift=-.1cm]2,0) -- (2,0);
            \draw[fill=white,xshift=.5cm,yshift=1cm] ([xshift=-.05cm,yshift=-.1cm]2,0) -- ([yshift=-.2cm]1,0) -- (0,0) -- ([xshift=-.2cm]0,1) -- ([xshift=-.05cm,yshift=-.1cm]0,2);
            \draw[fill=white,xshift=.5cm,yshift=1cm] ([xshift=-.2cm]0,1) -- ([yshift=-.2cm].9,1) -- ([xshift=-.15cm]2,1);
            \draw[xshift=.5cm,yshift=1cm] (1,1.8) -- ([yshift=-.2cm].9,1) -- ([yshift=-.2cm]1,0);
            \draw[xshift=.5cm,yshift=1cm,fill=white] ([xshift=-.05cm,yshift=-.1cm]2,0) -- ([xshift=-.15cm]2,1) -- ([yshift=-.2cm].9,1) -- (1,-.2) -- cycle;
            \draw[xshift=.5cm,yshift=1cm,fill=white] ([xshift=-.05cm,yshift=-.1cm]0,2) -- ([xshift=-.2cm]0,1) -- ([yshift=-.2cm].9,1) -- (1,1.8) -- cycle;
                \draw[xshift=.5cm,yshift=1.2cm] plot [smooth cycle] coordinates {(.5,1)(.4,.5)(.8,.2)(1.2,.3)(1.5,.5)(1.4,.8)(1.2,1)(1,1.1)};
            \draw[xshift=.5cm,yshift=1cm,fill=white] (2,2) -- ([xshift=-.05cm,yshift=-.1cm]2,2) -- ([xshift=-.15cm]2,1) -- ([xshift=-.05cm,yshift=-.1cm]2,0) -- (2,0) -- cycle;
        \draw (-1.4,0) -- ([xshift=.5cm,yshift=1.2cm].5,1);
        \draw (0,-1) -- ([xshift=.5cm,yshift=1.2cm]1.2,.3);
        \draw[shorten <=-.6cm,shorten >=.23cm,dash pattern=on 5pt off 1pt on .5 off 1pt] (0,0) -- ([xshift=.55cm,yshift=1cm]1,1);
        \begin{scope}[xshift=1.9cm,yshift=2.5cm]
            \begin{pgfonlayer}{background}
                \draw[fill=white,radius=1.3cm] (.2,.2) circle;
                \draw[fill=white,radius=1.3cm] (0,0) circle;
                \coordinate (a) at (1.12,1.12);
            \end{pgfonlayer}
        \end{scope}
        \begin{scope}[shift={(3.5,3.5)}]
            \foreach \x in {1,2}
            \foreach \y in {1,2}
            {
                \draw[radius=.4cm] (\x,\y) circle;
            }
                \coordinate (b) at (.68,2.25);
                \coordinate (c) at ([xshift=1cm].68,2.25);
                \coordinate (d) at ([yshift=-1cm].68,2.25);
                \coordinate (e) at ([xshift=1cm,yshift=-1cm].68,2.25);
                    \coordinate (c1) at (1.35,1.8);
                    \coordinate (c2) at ([xshift=1cm]1.35,1.8);
                    \coordinate (c3) at ([yshift=-1cm]1.35,1.8);
                    \coordinate (c4) at ([xshift=1cm,yshift=-1cm]1.35,1.8);
            \draw (.5,.5) rectangle (2.5,2.5);
                \draw[dashed] (a) -- (1.5,1.5) node[pos=.34,above] {$b$};
                \draw[dashed] (c) -- ([xshift=-1.5cm,yshift=.25cm]a) -- (b);
                \draw[dashed] (d) -- ([xshift=-1.45cm,yshift=.29cm]a) -- (e);
                    \draw[dashed] (c1) -- ([xshift=.25cm,yshift=-1.5cm]a) -- (c2);
                    \draw[dashed] (c3) -- ([xshift=.25cm,yshift=-1.5cm]a) -- (c4);
            \node at (2.7,.3)  {\tiny Detector};
            \node at (0,2.7) {\tiny Pupils (abcd)};
                \draw[->] (1.5,2) -- (3,2) node[above] {$s$};
                \draw[->] (2,1.5) -- (2,3) node[right] {$t$};
                    \node at (.2,2.2) {$a$};
                    \node at (2.7,1) {$d$};
                    \node at (2.7,1.7) {$c$};
        \end{scope}
        \node[text width=1.7cm,left] at (-.5,1.3) {\tiny Large $F$/focus of the telescope};
        \node[text width=3cm] (n) at (4.5,0) {\tiny Blurred image of a reference source};
            \draw[->] (n) to[in=-20,out=170] ([xshift=.5cm,yshift=1.2cm]1.2,.3);
        \node at (4,1.5) {Lens Relay};
        \node[yscale=.5,arrownode] (node) at (-.5,3.3) {\phantom{\hspace{.7cm}}};
        \node[rotate=90,yscale=.5,arrownode,above=1 of node,yshift=-.1cm] (nnode) {\phantom{\hspace{.7cm}}};
        \node[above of=nnode] {\tiny Oscillating Pyramidal Prism};
    \end{tikzpicture}
\end{document}

Here is the output:

Screenshot

6
  • 1
    Awesome! How did you \draw each command? I would imagine a LOT manual efforts. Any automatic ways to do it?
    – WDC
    Aug 24, 2018 at 21:53
  • 2
    Nice! Did you use an external program to draw the picture and then copy the code into LaTeX?
    – manooooh
    Aug 24, 2018 at 21:55
  • 1
    @manooooh: No, I just literally draw this "by hand and eye" … (I think you asked me that 'cause of all the manual shifting … xD) Aug 24, 2018 at 22:00
  • 1
    @current_user Your previous reply has answered my question. So you did it all manually. This is really, really cool. Thank you.
    – WDC
    Aug 24, 2018 at 22:03
  • 1
    For me excellent work. +1
    – Sebastiano
    Aug 24, 2018 at 23:15
5

For my opinion, the figure is very complex to built with TikZ. It takes a lot of time; but if you want be quickly to realize your picture without to know TikZ, you can use, in particular,

0

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .