箭头与线段连接处的精度(Metapost)

箭头与线段连接处的精度(Metapost)

箭头末端和线段之间的连接不精确:为什么以及如何纠正这个问题?

    \documentclass[border=5mm]{standalone}
    \usepackage{luatex85}
    \usepackage{luamplib}
    \usepackage{unicode-math}
    \setmainfont{TeX Gyre Pagella}
    \setmathfont{TeX Gyre Pagella Math}
    \begin{document}
    \mplibtextextlabel{enable}
    \begin{mplibcode}
    beginfig(1);
    numeric u;
    u = 1cm;

    interim linejoin := mitered;
    interim ahangle := 30;

   z0 = (0,0);
   z1 = (4u,0);
   z2 = z1 rotatedaround(z0,50);
   z3 = whatever[z0,z1];
   (z2-z3) dotprod (z1-z0) = 0;
            
  color pink, forest, royal;
  pink = (3/4, 1/3, 1/3);
  forest = (1/3, 2/3, 1/4);
  royal = (1/3, 1/3, 2/3);

  path sq;
  sq = unitsquare scaled 6;

 fill sq shifted z3 withcolor 1/2[forest, white];

 draw fullcircle scaled 1cm shifted z1 withcolor red;

 drawoptions(withpen pencircle scaled 1.25pt);
            
 draw sq shifted z3 withcolor forest;

 draw z0--z1--z2--cycle withcolor pink;

 drawoptions();

 draw z2 -- z3 dashed evenly withcolor pink;
            
 drawoptions(withpen pencircle scaled 1.25pt withcolor 3/4[white,blue]);
 drawarrow z0 -- z1;
 drawarrow z0 -- z2;
 drawoptions();

 label.bot("$H$", z3);
 label.bot("$A$",z0);
 label.bot("$B$",z1);
 label.top("$C$",z2);

 endfig;
 \end{mplibcode}
 \end{document}

在此处输入图片描述

答案1

这里的问题是您选择的线宽、窄设置ahanglelinejoin模式之间的交互不良。

如果你看一下,plain.mp你会看到要填充的箭头定义如下:

(q rotated .5ahangle & reverse q rotated -.5ahangle -- cycle)  shifted e

其中是箭头路径的q最后一条路径,是其末端的点。ahlengthe

表示&箭头形状在尖端处会变成一个尖角(通常如您所愿)。这与默认笔宽(1/2 bp)和默认 配合得很好linejoin

但是当您设置 时linejoin := mitered,MP 会将角度的绘制委托给 PostScript,因此您只能听天由命,看 PostScript 如何处理尖角。在本例中,这意味着箭头会伸出 一定距离e

而且你选择的笔太粗,效果会特别差。

为了使箭头停在正确的位置,简单的方法就是不改变 的默认值linejoin。这是注释掉第 14 行后的图表:

在此处输入图片描述

但是现在你的小绿框看起来有点奇怪...所以如果你必须使用,linejoin := mitered那么你需要额外的内部变量来控制它。默认情况下,MP 设置,miterlimit = 10;但如果你将它降低到临界值以下,则可以避免 PostScript 突出效果。

这是你的图表

interim linejoin := mitered;
miterlimit := 3;

在此处输入图片描述

现在箭头位于正确的位置并且绿色框看起来没问题,但是 A 处的蓝色角是圆的,因此您可以看到下面突出的粉红色三角形。

我认为从这一切中可以学到的教训是,Metapost 箭头和其他尖角最适合默认的线连接设置,并且线宽范围有限。如果您使用比线宽大得多的线,pencircle scaled 1您可能需要格外小心所有角。

以下是我的一个参考图表使用 Metapost 绘图注释(第 14 节)。此处的线条是用 绘制的,pencircle scaled 2以夸大效果。一般来说,使用 时缺陷不太明显pencircle scaled 1/2

在此处输入图片描述

相关内容