我想为圆弧和子路径之间的区域添加阴影。我尝试使用buildcycle
但没有结果。我该怎么办?
\starttext
\startuseMPgraphic{name}
draw fullcircle scaled 4cm;
path q; q := subpath (0, 5) of fullcircle scaled 4cm; drawarrow q;
path p[];
p1 = subpath (5, 8) of fullcircle scaled 4cm;
p2 = (cosd 225, sind 225)*2cm -- (cosd 0, sind 0)*2cm;
p3 = buildcycle(p1, p2);
filldraw p3 withcolor green;
draw p1; draw p2;
\stopuseMPgraphic
\useMPgraphic{name}
\stoptext
答案1
这里不需要buildcycle
。由于您所做的只是关闭圆弧路径,因此您可以像-- cycle
这样使用:
\starttext
\startuseMPgraphic{name}
path C, q, area;
C = fullcircle scaled 4cm;
q = subpath (0, 5) of C;
area = subpath (5, 8) of C -- cycle;
fill area withcolor 1/2[green, white];
draw area;
drawarrow q;
\stopuseMPgraphic
\useMPgraphic{name}
\stoptext
为什么
buildcycle
在这里不起作用是一个有趣的问题。这并不是因为两条路径不重叠——在这种情况下你会收到一条错误消息——我认为这是因为当buildcycle
寻找交叉点时,它两次都找到同一个点,所以它填充的区域只是一个点(所以你看不到它)。使用 plain 编译 OP 代码
mpost
会产生以下 PostScript 输出(部分)0 1 0 setrgbcolor newpath -40.08661 -40.08762 moveto -40.08652 -40.08739 lineto closepath gsave fill grestore stroke
这证实了我的理论,即
buildcycle
创建了一条非常微小的封闭路径,在输出中是不可见的。