Я не понимаю ошибку, возникающую при компиляции этого кода, который не работает (основан на идее Франка Пастора)Площадь между двумя кривыми
beginfig(1);
interim linejoin := mitered;
interim ahangle := 30;
numeric u, pi, a, b;
pi = 3.141592653589793;
u = 1.5cm;
vardef graph_of_function (suffix f) (expr xmin, xmax, xsep) =
for x = xmin step xsep until xmax: (x, f(x)) .. endfor (xmax, f(xmax))
enddef ;
vardef vline (suffix f, g) (expr x) = (x, min(f(x), g(x))) -- (x, max(f(x),g(x)))
enddef;
vardef area_between_functions (suffix f, g)(expr a, b, xsep) =
buildcycle(graph_of_function(f, a, b, xsep), vline(f, g, b),
reverse graph_of_function(g, a, b, xsep), reverse vline(f, g, a))
enddef;
xmin :=-pi/2; xmax := 3*pi/2;
ymin :=-1.5; ymax := 5;
vardef f(expr x)= exp(-x)*(-cos(x)+sin(x)+1) enddef;
vardef g(expr x)=-exp(-x)*cos(x) enddef;
path C_f, C_g;
C_f = graph_of_function(f,xmin,xmax,0.01);
C_g = graph_of_function(g,xmin,xmax,0.01);
a = xpart(C_f intersectionpoint C_g);
b = xpart(reverse C_f intersectionpoint reverse C_g);
fill (area_between_functions(f, g, a, b, 0.1)) scaled u withcolor 0.4[white, blue];
draw C_f scaled u withcolor blue;
draw C_g scaled u withcolor blue;
endfig;
Вот вывод консоли
MPtoPDF 1.4.1 : running 'mpost --mem=mpost logo.mp'
This is MetaPost, version 2.10 (TeX Live 2024) (kpathsea version 6.4.0)
(/home/fabrice/texlive/2024/texmf-dist/metapost/base/mpost.mp
(/home/fabrice/texlive/2024/texmf-dist/metapost/base/plain.mp
Preloading the plain mem file, version 1.005) ) (./logo.mp
>> exp
! Isolated expression.
<to be read again>
(
f->begingroup.exp(
-(EXPR2))*(-cos((EXPR2))+sin((EXPR2))+1)endgroup
<for(-1.5708)> ((EXPR0),f((EXPR0))
).. ENDFOR
graph_of_function->...R4):(x,(SUFFIX2)(x))..endfor
((EXPR4),(SUFFIX2)((EXPR4)...
l.33 C_f = graph_of_function(f,xmin,xmax,0.01)
;
[...]
Transcript written on logo.log.
MPtoPDF 1.4.1 : error while processing mp file
решение1
Пожалуйста, укажите ссылки на источники кода, которые вы используете.Имя — это хорошо, но было бы намного проще ответить на этот вопрос, если бы вы включили ссылку. Я также мог бы теперь дать вам лучшее объяснение, потому что я мог бы указать конкретно на контекст, который вы упускаете.
При отсутствии такой информации просто скомпилируйте с помощью
mpost --mem=metafun --numbersystem=double <filename>.mp
Я бы опубликовал изображение, но последняя версия Okular-on-X выдает такой результат, который навсегда отпугнет читателей от MetaPost, и это было бы крайне несправедливо.
я использовалОтвет Франка Пасторано я понятия не имею, использовал ли это OP. Я предполагаю, metafun
что он делает работу здесь. double
просто удваивает точность.