如何在 metapost 中将一个点初始化为另外两个点的线性组合?

如何在 metapost 中将一个点初始化为另外两个点的线性组合?

我正在尝试将一个新点初始化为另外两个点的线性组合,作为绘制一条花式线的第一步。

目前我正在尝试这个:

vardef line(expr pfirst, psecond)=

    tangent := psecond-pfirst;
    draw u*pfirst--u*psecond withpen pencircle scaled 1 withcolor black;

enddef;

我也尝试过不使用冒号,而是将表达式放在括号中。

我得到的错误是:

 >> tangent
(luamplib)               >> (-1,-1)
(luamplib)               ! Equation cannot be performed (numeric=pair).
(luamplib)               <to be read again> 

答案1

中未声明的变量metapost被假定为numeric。因此,类似

beginfig(0);
  % myvar undeclared-> assumed to be numeric
  myvar:=0;
endfig;

不会产生错误。但是,

beginfig(0);
% myvar undeclared-> assumed to be numeric 
% error because assigning the pair (0,0) to the numeric variable myvar.
  myvar:=(0,0);
endfig;

将产生与上述相同的错误。因此,可以通过告知metaposttangent是一个pair变量来解决您的问题:

vardef line(expr pfirst, psecond)=
    save tangent; % make tangent local to the vardef (if this is desired)
    pair tangent; % tell metapost that tangent will hold a pair
    tangent := psecond-pfirst;
    draw u*pfirst--u*psecond withpen pencircle scaled 1 withcolor black;

enddef;

相关内容