I want to reproduce the image below with Metapost. I think this code is too long and the result is not exactly the expected one.
beginfig(1)
input hatching ;
hatchoptions (withcolor red);
path p, q, r, b ;
pair t[] ;
p := fullcircle scaled 6cm ;
q := fullcircle scaled 4cm shifted (2.5cm,2cm) ;
r := fullcircle scaled 4cm shifted (-2.5cm,2cm);
b := fullcircle scaled 2cm shifted (0,-3cm);
z1 = p intersectionpoint r ;
dotlabel.urt("1",z1) withcolor blue ;
t0 := p intersectiontimes r ;
p := subpath(xpart t0, infinity) of p ;
r := subpath(ypart t0, infinity) of r ;
z2 = p intersectionpoint r ;
dotlabel.urt("2",z2) withcolor red ;
z3 = p intersectionpoint q ;
dotlabel.urt("3",z3) withcolor magenta ;
t1 := p intersectiontimes q ;
p := subpath(xpart t1, infinity) of p ;
q := subpath(ypart t1, infinity) of q ;
z4 = p intersectionpoint q ;
dotlabel.ulft("4",z4) withcolor cyan ;
z5 = p intersectionpoint b ;
dotlabel.ulft("5",z5) withcolor magenta ;
t2 := p intersectiontimes b ;
p := subpath(xpart t2, infinity) of p ;
b := subpath(ypart t2, infinity) of b ;
z6 = p intersectionpoint b ;
dotlabel.urt("6",z6) withcolor red ;
hatchfill buildcycle(z1 .. point 2 of r .. point 4 of r .. z2, z2 .. point 6 of p .. z1)
withcolor (-90, 2mm, -1bp) ;
hatchfill buildcycle(z3 .. point 2 of q .. point 4 of q .. z4,z4 .. point 4 of p .. z3)
withcolor (-90, 2mm, -1bp) ;
hatchfill buildcycle(z1 .. point 8 of r .. point 7 of r .. point 6 of r ..
z2 .. point 7 of p .. point 8 of p .. z5 .. point 8 of b .. point 7 of b ..
z6 .. point 10 of p .. point 11 of p.. z3 .. point 8 of q .. point 7 of q ..
point 6 of q .. z4 .. point 5 of p .. z1)
withcolor (-180, 2mm, -1bp) ;
hatchfill buildcycle(z6 .. point 3 of b .. z5,z5 .. point 9 of p .. z6)
withcolor (-90, 2mm, -1bp) ;
draw p ;
draw q ;
draw r ;
draw b ;
endfig;
end
\startMPcode ... \stopMPcode