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
正如我上面提到的,我不知道为什么 hatchfill 无法填充我的图表。
答案1
代替
kujund:=buildcycle(m, n);
尝试
kujund:=buildcycle(reverse m, n);
或者
kujund:=buildcycle(m, reverse n);
无论哪种方式,它对我来说都有效:
顺便说一句,buildcycle
如果只使用两个路径,这个宏可能会比较棘手。请参阅Metapost 文档第 30-32 页,详细了解其工作原理。鉴于这种工作方式,似乎通过询问
buildcycle(m,n)
它导致 Metapost 在两个点(我猜是 (0,-4) 和两个抛物线的交点)甚至一个点(我猜是 (0,-4))之间建立一个循环,因此没有明显的结果。然而
buildcycle(m, reverse n)
引导其在预期的交叉点之间构建所请求的循环。
答案2
这是一个稍微简单的版本,它删除了临时路径m
和n
,并使用是-axis 直接在buildcycle
命令中(这也消除了反转其中一条路径的需要)。
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.