TikZ:如何在一组点和它们的范围图像之间画线并填充封闭区域?

TikZ:如何在一组点和它们的范围图像之间画线并填充封闭区域?

下列的这个答案, 我需要:

  1. a在点和它的范围图像之间画一条水平线,在点b和它的范围图像之间画另一条水平线
  2. 用上一步画出的两条水平线、连接a和 的线以及连接和 的b图像的线来填充梯形。ab

在此处输入图片描述

    \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定义自己的宏并调用它们picspics使用格诺特密码可以简化为:

\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来引用:或。prefixpicleft-aright-b

在此处输入图片描述

相关内容