![TikZ:如何在一组点和它们的范围图像之间画线并填充封闭区域?](https://linux22.com/image/352471/TikZ%EF%BC%9A%E5%A6%82%E4%BD%95%E5%9C%A8%E4%B8%80%E7%BB%84%E7%82%B9%E5%92%8C%E5%AE%83%E4%BB%AC%E7%9A%84%E8%8C%83%E5%9B%B4%E5%9B%BE%E5%83%8F%E4%B9%8B%E9%97%B4%E7%94%BB%E7%BA%BF%E5%B9%B6%E5%A1%AB%E5%85%85%E5%B0%81%E9%97%AD%E5%8C%BA%E5%9F%9F%EF%BC%9F.png)
下列的这个答案, 我需要:
a
在点和它的范围图像之间画一条水平线,在点b
和它的范围图像之间画另一条水平线- 用上一步画出的两条水平线、连接
a
和 的线以及连接和 的b
图像的线来填充梯形。a
b
\documentclass[border=2pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{matrix,positioning,calc}
\usetikzlibrary{decorations.pathmorphing,arrows.meta}
\tikzset{>={Latex[width=2mm,length=2mm]}}
\usepackage{environ}
\NewEnviron{xmirror}[2]{
\BODY
\begin{scope}[xscale= #1,xshift=#2]\BODY\end{scope}
}
\begin{document}
\begin{tikzpicture}
\begin{xmirror}{-1}{-4cm}
\draw [fill=yellow] (0,0) -- ++(0.4,0) coordinate(a) node[right]{a} -- ++(1,-2) coordinate(b) node[right]{b} -- ++(0,-0.2) -- ++(-0.2,0) -- ++(0,-0.2) -- ++(-0.2,0) -- ++(0,0.4) -- cycle ;
\end{xmirror}
\end{tikzpicture}
\end{document}
答案1
像这样:
或这个:
不同之处在于标签。在下面的第二种情况下,代码被删除:
\documentclass[tikz, border=2pt]{standalone}
\usetikzlibrary{arrows.meta, backgrounds, calc,
decorations.pathmorphing,
matrix, positioning,}
\tikzset{>={Latex[width=2mm,length=2mm]}
}
\begin{document}
\begin{tikzpicture}
\draw [fill=yellow] (0,0) -- ++(0.4, 0) coordinate[label=0:a] (a1)
-- ++(1.0,-2) coordinate[label=0:b] (b1)
-- ++(0,-0.2) -- ++(-0.2,0) -- ++(0,-0.2)
-- ++(-0.2,0) -- ++(0,0.4) -- cycle;
\begin{scope}[xscale=-1, xshift=-4cm]
\draw [fill=yellow] (0,0) -- ++(0.4, 0) coordinate[label=180:a] (a2)
-- ++(1.0,-2) coordinate[label=180:b] (b2)
-- ++(0,-0.2) -- ++(-0.2,0) -- ++(0,-0.2)
-- ++(-0.2,0) -- ++(0,0.4) -- cycle;
\end{scope}
\draw (a1) -- (a2) (b1) -- (b2);
\scoped[on background layer]
\fill[cyan!10] (a1) -- (b1) -- (b2) -- (a2) -- cycle;
\end{tikzpicture}
\end{document}
不幸的是,使用你的方法,只有手动确定坐标才有可能a1
......b2
在我看来,复制形状比像上面那样缩放和移动更简单。
答案2
这是原始方法和 Zarko 的答案的结合。主要观点是使用宏
\somepart[options for scope environment]{name}
绘制一次黄色部分并用 和 标记相关name-a
位置name-b
。
\documentclass[border=2pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{backgrounds}
\newcommand\somepart[2][]%
{\begin{scope}[#1]
\draw[fill=yellow]
(0,0)
-- ++(0.4,0) coordinate(#2-a)
-- ++(1,-2) coordinate(#2-b)
-- ++(0,-0.2)
-- ++(-0.2,0)
-- ++(0,-0.2)
-- ++(-0.2,0)
-- ++(0,0.4)
-- cycle ;
\end{scope}%
}
\begin{document}
\begin{tikzpicture}
\somepart{left}
\somepart[xscale=-1,xshift=-4cm]{right}
\draw (left-a) -- (right-a) (left-b) -- (right-b);
\scoped[on background layer]
\fill[cyan!10] (left-a) -- (left-b) -- (right-b) -- (right-a) -- cycle;
\end{tikzpicture}
\end{document}
答案3
TikZ
定义自己的宏并调用它们pics
。pics
使用格诺特密码可以简化为:
\documentclass[border=2pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{backgrounds}
\tikzset{
somepart/.pic={
\draw[fill=yellow]
(0,0)
-- ++(0.4,0) coordinate(-a)
-- ++(1,-2) coordinate(-b)
|- ++(-0.2,-0.2)
|- ++(-0.2,-0.2)
-- ++(0,0.4)
-- cycle ;
}
}
\begin{document}
\begin{tikzpicture}
\pic (left) at (0,0) {somepart};
\pic[xscale=-1] (right) at (4,0) {somepart};
\draw[fill=cyan!10] (left-a) -- (right-a) -- (right-b) -- (left-b)--cycle;
\end{tikzpicture}
\end{document}
在 内部定义的坐标名称pic
,如-a
和-b
可以在 之外通过由名称 形成的pic
来引用:或。prefix
pic
left-a
right-b