我不知道如何在 Metapost 中绘制这两个形状,虽然很容易,但我真的不明白。
这是我尝试修复的代码在线可视化工具:
beginfig(0);
draw (0,0)--(5,0)..(7.5,2.5)..(7.5,7.5)..(5,10)--(0,10)--cycle;
endfig;
解决方案由@mickep 提供
draw (0,0)--(5,0){right}..{up}(7.5,2.5)--(7.5,7.5){up}..{left}(5,10)--(0,10)--cycle;
这完美地绘制了B
如何我不明白如何恢复坐标来绘制A
。
或者,如果您了解任何可以将简单形状从 SVG 转换为 Metapost 的工具,那就太好了!
谢谢
答案1
现在我们得到了一个正确的结果,另一个是通过使用 得到的rotatedaround
。我建议为点引入变量。此外, 意味着z1{right}
我们应该z1
朝着正确的方向出发。 意味着我们应该向上{up}z2
到达。我还引入了一个单位长度,如果你想缩放,你可以改变它。请不要介意和,它们只是为了使示例完整,以便用 进行编译。z2
u
\startMPpage
\stopMPpage
context
\startMPpage[offset=3BP]
u := .25cm ;
z0 = origin ; z1 = (5,0) ; z2 = (7.5,2.5) ; z3 = (7.5,7.5) ; z4 = (5,10) ; z5 = (0,10) ;
z6 = (2,0) ; % shift
path A, B ;
B := z0 -- z1{right} .. {up}z2 -- z3{up} .. {left}z4 -- z5 -- cycle ;
B := B shifted z6 ;
B := B scaled u ;
A := B rotatedaround((0,.5(y0 + y5)) scaled u, 180) ;
fill A withcolor .85white ;
fill B withcolor .85white ;
draw A ;
draw B ;
label("A", (-x6 - .5(x0 + x3), .5(y0 + y5)) scaled u ) ;
label("B", ( x6 + .5(x0 + x3), .5(y0 + y5)) scaled u ) ;
\stopMPpage
答案2
这里有一个替代方法 —— 这个方法是为 设置的,luamplib
所以您需要用 来编译它lualatex
。
\documentclass[border=5mm]{standalone}
\usepackage{luamplib}
\usepackage{fontspec}
\setmainfont{Impact}
\begin{document}
\mplibtextextlabel{enable}
\begin{mplibcode}
beginfig(1);
numeric u; u = 12;
path C, D;
C = quartercircle rotated 180 shifted (1/2, 1/2) scaled 2u shifted (-3u, 0) -- (0, 0) -- (0, 5u) --
quartercircle rotated 90 shifted (1/2,-1/2) scaled 2u shifted (-3u, 5u) -- cycle;
C := C shifted (-u, 0);
D = C reflectedabout(up, down);
fill C withcolor .95; draw C; label("\Huge A", center C);
fill D withcolor .95; draw D; label("\Huge B", center D);
endfig;
\end{mplibcode}
\end{document}
笔记
您
lualatex
可以在 Latex 级别控制字体。这里我使用的是fontspec
安装在 Mac 上的 Impact 字体。为了制作第一个“C”形路径,我使用了内置路径
quartercircle
,并进行了适当的旋转、移动和缩放,以使角变成圆形。然后“C”形路径稍微向左移动。请注意,您需要使用赋值运算符
:=
来更新变量。为了得到“D”形路径,最简单的方法是使用
reflectedabout
然后填充、绘制并标记每条路径。