9

I would like to have a PSTricks drawing of the following picture:

newton

I have no problem drawing the arrows, but I have absolutely no idea how to draw the two ellipses do to the varying linewidth.

The drawing of the arrows:

\documentclass{article}

\usepackage{pstricks} \psset{ arrows = ->, arrowsize = 10pt }

\begin{document}

\begin{pspicture}(-5,-2.9)(4.5,2.9) \psline linewidth = 3\pslinewidth, linecolor = green (-5,0) \psset{linewidth = 2\pslinewidth} \psline(-1,0)(-2.5,0) \psline(-0.8,0.8)(-1.5,1.5) \psline(0,1)(0,1.8) \psline(1.3,0.7)(2,1.4) \psline(1.3,-0.7)(2,-1.4) \psline(0,-1)(0,-1.8) \psline(-0.8,-0.8)(-1.5,-1.5) \psline(2.95,0.5)(4.2,0.7) \psline(3,0)(4.5,0) \psline(2.95,-0.5)(4.2,-0.7) \psset{linecolor = gray!50!white} \psline(-2.5,2.5)(-1.8,1.8) \psline(0,2.9)(0,2.1) \psline(2.9,2.2)(2.1,1.5) \psline(2.9,-2.2)(2.1,-1.5) \psline(0,-2.9)(0,-2.1) \psline(-2.5,-2.5)(-1.8,-1.8) \end{pspicture}

\end{document}

output

Update

Here is what I ended up with:

\documentclass{article}

\usepackage{pstricks}

\begin{document}

\begin{figure} \centering \begin{pspicture}(-5,-2.9)(5,2.9) \psset{ arrows = ->, arrowsize = 10pt } {\psset{linecolor = red!50!white} \psline linewidth = 3\pslinewidth (-5,0) \psline(3.45,0.4)(4.7,0.7) \psline(3.5,0)(5,0) \psline(3.45,-0.4)(4.7,-0.7)} \psset{linewidth = 2\pslinewidth} \psellipse fillstyle = solid, fillcolor = black (3,2) \psellipse linecolor = white, fillstyle = solid, fillcolor = white (2.9,1.9) \psellipse fillstyle = solid, fillcolor = black (0.2,0.5) \psellipse linecolor = white, fillstyle = solid, fillcolor = white (0.17,0.4) \psline(-1,0)(-2.7,0) \psline(-0.8,0.8)(-1.5,1.5) \psline(0,1)(0,1.8) \psline(1.3,0.7)(1.93,1.35) \psline(1.3,-0.7)(1.93,-1.35) \psline(0,-1)(0,-1.8) \psline(-0.8,-0.8)(-1.5,-1.5) \psset{linecolor = gray!50!white} \psline(-2.4,2.5)(-1.7,1.8) \psline(0,2.9)(0,2.1) \psline(2.9,2.3)(2.15,1.55) \psline(2.9,-2.3)(2.15,-1.55) \psline(0,-2.9)(0,-2.1) \psline(-2.4,-2.5)(-1.7,-1.8) \end{pspicture} \caption{Newton's third law on a balloon.} \label{fig:newton-balloon} \end{figure}

\end{document}

3 Answers3

9

A PSTricks solution only for fun. I just provided you with the main part. Other parts are too trivial.

\documentclass[pstricks,border=\dimexpr355pt/113]{standalone}
\begin{document}
\pspicture(8.7,6)
    \pscustom[fillstyle=eofill,fillcolor=red,linestyle=none,linewidth=0]
    {
        \psellipse(4,3)(4,3)
        \psellipse(4.2,3)(3.8,2.8)
        \psellipse(8.45,3)(0.25,0.7)
        \psellipse(8.43,3)(0.23,0.6)
    }
\endpspicture
\end{document}

enter image description here

Bonus 1: Gradient Color

enter image description here

\documentclass[pstricks,border=\dimexpr355pt/113]{standalone}
\usepackage{pst-grad}

\newpsstyle{gradient} { fillstyle=gradient, gradbegin=red, gradend=yellow, gradangle=30, gradmidpoint=0.5, }

\begin{document} \pspicture(8.7,6) \pscustom[style=gradient,linestyle=none,linewidth=0] { \code{/clip /eoclip load def} \psellipse(4,3)(4,3) \psellipse(4.2,3)(3.8,2.8) \psellipse(8.45,3)(0.25,0.7) \psellipse(8.43,3)(0.23,0.6) } \endpspicture \end{document}

Bonus 2: Image Clipper

enter image description here

\documentclass[pstricks,border=\dimexpr355pt/113]{standalone}
\usepackage{graphicx}
\newsavebox\IBox
\savebox\IBox{\includegraphics[scale=3]{example-grid-100x100pt}}

\begin{document} \pspicture(8.7,6) \psclip{% \pscustom[linestyle=none,linewidth=0] { \code{/clip /eoclip load def} \psellipse(4,3)(4,3) \psellipse(4.2,3)(3.8,2.8) \psellipse(8.45,3)(0.25,0.7) \psellipse(8.43,3)(0.23,0.6) }} \rput(4,3){\usebox\IBox} \endpsclip \endpspicture \end{document}

Display Name
  • 46,933
6

I understand that this is a pstricks question, but I would like to mention that in tikz one can use even odd rule to produce these ellipses. Whether an analogous method exists for pstricks I do not know. Nonetheless, here is the tikz code, maybe someone can convert it to pstricks.

\documentclass[tikz,border=2mm]{standalone}
\begin{document}
\begin{tikzpicture}
 \fill[even odd rule] circle[x radius=4.15,y radius=2.1]
    (0.15,0)  circle[x radius=4,y radius=2]
    (4.8,0) circle[x radius=0.4,y radius=0.8]
    (4.85,0) circle[x radius=0.45,y radius=0.9];
 \path[every edge/.append style={very thick,-stealth}] 
  (-4.5,0) edge[ultra thick,green] ++ (-2,0)
  foreach \Angle in {45,90,...,315} 
  {(\Angle:1 and 0.5) edge (\Angle:3.75 and 1.75)
  \unless\ifnum\Angle=180\relax
  (\Angle:6 and 3) edge[gray] (\Angle:4.5 and 2.25)
  \fi}
  foreach \Angle in {20,0,-20} 
  {(4,0) ++ (\Angle:1.5) edge ++ (\Angle:1)};
\end{tikzpicture}
\end{document}

enter image description here

2
\documentclass[pstricks,border=1mm]{standalone}
\begin{document}
\pspicture(8.7,6)
\psellipse[linewidth=3mm,linecolor=red](4,3)(4,3)
\psellipse*[origin={0.17,0},linecolor=white](4,3)(3.8,2.9)
\psellipse[linewidth=2mm,linecolor=red](8.45,3)(0.25,0.7)
\psellipse*[origin={-0.05,0},linecolor=white](8.45,3)(0.22,0.52)
\endpspicture
\end{document}

enter image description here

user187802
  • 16,850