我有以下 TikZ:
\begin{tikzpicture}
\draw[fill=gray!50, dashed]
([shift={(-0.5,0)}]0:0.5) arc[radius=0.5cm, start angle=0, end angle=45]
-- ([shift={(0,0)}]102.5:0.383) arc[radius=0.383cm, start angle=102.5, end angle=67.5]
-- ([shift={(0.5,0)}]135:0.5) arc[radius=0.5cm, start angle=135, end angle=180]
-- cycle;
\end{tikzpicture}
它产生
我想要这个精确的形状,但我希望顶部的圆弧是实线而不是虚线。我可以用一个 \draw 命令来做到这一点吗?如果不行,最简单的方法是什么?
答案1
最简单的解决方案可能就是在其上绘制:
笔记:
- 由于某种原因,我不得不将线条拉长
0.18em
。将线条宽度稍微加宽以隐藏导致轻微差异的原因,但这种拉长。由于您更了解代码,您可以删除shorten <=-0.18em]
和line width=0.57pt
选项并调整绘图。
代码:
\documentclass[tikz,border=10pt]{standalone}
\begin{document}
\begin{tikzpicture}
\draw[fill=gray!50, dashed]
([shift={(-0.5,0)}]0:0.5) arc[radius=0.5cm, start angle=0, end angle=45 ]
-- ([shift={(0,0)}]102.5:0.383) arc[radius=0.383cm, start angle=102.5, end angle=67.5]
-- ([shift={(0.5,0)}]135:0.5) arc[radius=0.5cm, start angle=135, end angle=180 ]
-- cycle;
\draw [red, line width=0.57pt, cap=round, shorten <=-0.18em] %
(102.5:0.383) arc[radius=0.383cm, start angle=102.5, end angle=67.5]
;
\end{tikzpicture}
\end{document}
答案2
以下是一种方法元帖子以供比较。
prologues := 3;
outputtemplate := "%j%c.eps";
beginfig(1);
path shape;
shape = buildcycle(halfcircle shifted 1/2 left,
halfcircle scaled 3/4,
halfcircle shifted 1/2 right) scaled 3cm;
fill shape withcolor 3/4 white;
draw subpath(0,1) of shape dashed evenly;
draw subpath(2,4) of shape withcolor .67 red;
draw subpath(5,6) of shape dashed evenly;
endfig;
end.
我使用了subpath (t,u) of p
符号,其中t
和u
表示沿路径的所需“时间” p
。
弄清楚 MetaPost 认为这些点在由 创建的路径上的位置可能有点棘手buildcycle
,但这种情况很典型,因为每个角都有两个点。为了准确确定我想要的点,我使用了一个临时循环来标记它们:
for i=1 upto length(shape): dotlabel.top(decimal i, point i of shape); endfor