I am trying to reproduce this complicated figure using tikz : this consists of 2 merging hemisphere as shown below : enter image description here

I don't know if this is really difficult in latex but I have tried to inspire myself from previous posts on this website like for this code :



%define polar coordinates for some vector
%TODO: look into using 3d spherical coordinate system

%start tikz picture, and use the tdplot_main_coords style to implement the display 
%coordinate transformation provided by 3dplot
%draw the main coordinate system axes
\draw[thick,->] (0,0,0) -- (-1,0,0) node[anchor=south]{$z$};
\draw[thick,->] (0,0,0) -- (0,1,0) node[anchor=north west]{$x$};
\draw[thick,->] (0,0,0) -- (0,0,1) node[anchor=south]{$y$};


%draw some dashed arcs, demonstrating direct arc drawing
\draw[dashed,tdplot_rotated_coords] (\radius,0,0) arc (0:90:\radius);

\draw[dashed] (\radius,0,0) arc (0:360:\radius);
\shade[ball color=blue!10!white,opacity=0.2] (1cm,0) arc (0:-180:1cm and 5mm) arc (180:0:1cm and 1cm);
% (-z x y)
\draw (0, 1, 0) node [circle, fill=blue, inner sep=.02cm] () {};
\draw (0, 0, 1) node [circle, fill=green, inner sep=.02cm] () {};
\draw (-1, 0, 0) node [circle, fill=red, inner sep=.02cm] () {};

But I am not able to reproduce this figure in 2 sides and then obtaining the merged region between the half-sphere seems impossible to me...

Does anyone have some tips in order to achieve this complex task ?

Thank you in advance for your indications,

Best regards.

P.S : This is the result obtained with the code provided in the post : enter image description here

  • 1
    nice. Can you add a screenshot of your code's result, please? // BTW, you can always act like an artist or designer and sketch w.o. 3D-packages. E.g. use two Bezier lines (thick), a couple of dashed arcs etc. And if you're inspired, you also introduce some vanishing points to give it an even more realistic touch.
    – MS-SPO
    Commented Sep 18, 2023 at 9:05
  • 1
    @MS-SPO Thank you for your reply : I think you are right but by doing so I have a lot of difficulties with the little zone between the 2 merged spheres... I think it's easier with a software like Illustrator but in LaTex I am still improving :))
    – Waxler
    Commented Sep 18, 2023 at 9:27

1 Answer 1


I'm not sure what you want to achieve exactly, but a simple sketch for your first figure (using hemispheres) can be drawn with the help of TikZ libraries 3d and perspective in isometric view. You'll need to compute a couple of dimensions (angle and radius for the intersection curve).

Something like this;


\tikzset{hemisphere/.style={#1,shading=ball,ball color=#1,fill opacity=0.75}}

\begin{tikzpicture}[isometric view,rotate around z=-90,line cap=round,line join=round]
  % some dimensions
  \pgfmathsetmacro\r{1}                       % radius
  \pgfmathsetmacro\d{1.9}                     % distance between centers
  \pgfmathsetmacro\a{acos(\d/(2*\r)}          % angle
  \pgfmathsetmacro\jr{sqrt(\r*\r-0.25*\d*\d)} % join radius
  % x-axis and centers
  \draw[canvas is xy plane at z=0,scale=1.5,fill=gray!15] (-\r,-\r) rectangle (\d+\r,\r);
  \draw[-latex] (0,0) -- (3.5*\r,0) node[right] {$x$};
  \foreach\i in {0,1}
    \fill (\i*\d,0) circle (0.2mm);
  % blue hemisphere
  \draw[blue] (225:\r) arc (225:45:\r);
  \draw[hemisphere=blue] (225:\r) arc (225:360-\a:\r)
      {[canvas is yz plane at x=0.5*\d] arc (180:0:\jr)} arc (\a:45:\r) arc (0:180:\r cm);
  % red hemisphere
  \draw[red] (\d,0) ++ (225:\r) arc (225:180+\a:\r)
      {[canvas is yz plane at x=0.5*\d] arc (180:0:\jr)} arc (180-\a:45:\r);
  \draw[hemisphere=red] (\d,0) ++ (225:\r) arc (225:405:\r) arc (0:180:\r cm);

enter image description here

  • Thank you a lot for your answer : I am progressing to understand how using 3d in tikz : it's not easy. I have a question : how can we specify drawing in the yz plane ? For instance for adding a z-axis and for drawing an arc in the yz plane ? Thank you !
    – Waxler
    Commented Sep 20, 2023 at 14:25
  • @Wiss, with the option canvas is yz plane at x=0 or any other value if you need a parallel plane. There are examples in my code Commented Sep 21, 2023 at 5:15

You must log in to answer this question.

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