我正在尝试接近的fill
一部分。point 0
circularpath
path circle ; circle = circularpath(10) scaled 200 ;
pair a, b ; a = point 35 of circle ; b := point 5 of circle ;
fill buildcycle((origin--a), (origin--b), circle) withcolor lightgray ;
draw circle ; dotlabel.top("A", a) ; dotlabel.top("B", b) ;
我尝试了我能想到的所有可能的参数组合buildcycle
,reverse
但总是给出以下错误的输出:
确实,我的目标是交换颜色并仅让小区域变成灰色。
我怎样才能实现这个目标?
答案1
我从来没有真正理解过 buildcycle 是如何工作的。在这种情况下,你不需要它。你可以尝试这样的操作:
\startMPpage[offset=1dk]
path circle ; circle := fullcircle scaled 200 ;
z[0] = point 1 of circle ;
z[1] = point 3 of circle ;
fill subpath(1,3) of circle -- origin -- cycle withcolor lightgray ;
draw circle ;
freedotlabel("B", z[0],origin) ;
freedotlabel("A", z[1],origin) ;
\stopMPpage
由于您似乎使用 MetaFun,因此我还将您的 dotlabels 更改为 freedotlabels。
答案2
这里没必要buildcycle
。
我稍微简化了一下以使其与普通 MP 一起使用,但这也应该在 Context 格式中起作用metafun
。
\documentclass[border=5mm]{standalone}
\usepackage{luamplib}
\begin{document}
\mplibtextextlabel{enable}
\begin{mplibcode}
beginfig(1);
path circle;
circle = fullcircle scaled 200;
numeric a, b; a = 3; b = 1;
fill origin -- subpath (a, b) of circle -- cycle withcolor 7/8;
draw circle;
dotlabel.ulft("A", point a of circle);
dotlabel.urt("B", point b of circle);
endfig;
\end{mplibcode}
\end{document}
编译它lualatex
(或者适应你的环境)以获得以下内容: