# MetaPost: My code with buildcycle doesn't have the correct output and nothing changes

``````beginfig(1)
input hatching;
u := 5 mm;
path xtelg,ytelg;
xtelg := (-4u,0) -- (6u,0);
ytelg := (0,-4u) -- (0,9u);
drawarrow xtelg;
drawarrow ytelg;
path parab, paraa,m,n,kujund;
parab:= (0u,8u) for i=0.5 step .5 until 6: .. (i*u, (i*i-6*i+8)*u) endfor;
paraa:= (-3u,5u) for i=-2 step .5 until 3: ..(i*u,(i*i-4)*u) endfor;
draw parab;
draw paraa;
m:=(0,-4u)--(0,8u) for i=0 step 0.5 until 2: ..(i*u,(i**2-6*i+8)*u) endfor;
n:=(0,-4u) for i=0 step 0.5 until 2: ..(i*u,(i**2-4)*u) endfor;
kujund:=buildcycle(m,n);
hatchfill kujund withcolor(45,1mm,.5bp);
draw kujund;
endfig;
end
``````

Like I mentioned above, I don't know why the hatchfill won't fill my graph.

• This is your 3rd question and you did not accept the provided answer. Do you shoudl accept an answer, if it solved your problem? Commented Feb 12, 2020 at 22:46
• "Do you shoudl" = "Do you know, that you should" Commented Feb 12, 2020 at 23:04
• You might also like to review the answers to this question Commented Mar 2, 2020 at 13:55

``````kujund:=buildcycle(m, n);
``````

try

``````kujund:=buildcycle(reverse m, n);
``````

or

``````kujund:=buildcycle(m, reverse n);
``````

Either way, it works for me:

By the way, the `buildcycle` macro can be tricky if used with only two paths. See the Metapost documentation p. 30-32 for more details about how it works. Given this way of working, it seems that by asking

``````buildcycle(m,n)
``````

it leads Metapost to build a cycle between either only two points (I guess (0,-4) and the intersection of the two parabolas) or even only one point (I suppose (0,-4)) hence the absence of apparent result. Whereas

``````buildcycle(m, reverse n)
``````

leads it to build the requested cycle between the expected intersection points.

• note that if you really want hatching, you need to make the third components of the "color" negative. The fill is coming out as pale yellow here because the color `(45, 1mm, 0.5bp)` is being interepreted as `(1, 1, 0.5)`. Commented Mar 2, 2020 at 14:12

Here's a slightly simpler version that gets rid of the temporary paths `m` and `n`, and uses the y-axis directly in the `buildcycle` command (which also gets rid of the need to reverse one of the paths).

``````prologues := 3;
outputtemplate := "%j%c.eps";

input hatching

beginfig(1);
numeric u;
u = 5 mm;

path xtelg,ytelg;
xtelg = (4 left -- 6 right) scaled u;
ytelg = (4 down -- 9 up) scaled u;

path parab, paraa, kujund;
parab = ((0, 8) for i=1/2 step 1/2 until 6: .. (i, i**2 - 6i + 8) endfor) scaled u;
paraa = ((-3, 5) for i=-2 step 1/2 until 3: .. (i, i**2 - 4) endfor) scaled u;

kujund = buildcycle(ytelg, parab, paraa);

drawoptions(withcolor 1/2 white);
hatchfill kujund withcolor (45, 3, -1/2);
drawoptions();

draw parab;
draw paraa;
drawarrow xtelg;
drawarrow ytelg;

endfig;
end.
``````