答案1
编辑1:增加了对区域进行着色的第二种可能性。
编辑2:将节点放置在区域的中心
一种可能性是使用 TikZ 计算正方形中绘制的两个线段的交点坐标;然后对所需部分着色。
为此,有一个操作不再记录在手册 3.0.1a 中,但功能齐全。其文档可在1.18
仍可用的手册中找到(直到什么时候?)此处TikZ 手册 1.18(第 87 页,第 10.2.4 节交叉坐标系)。
\documentclass[border=5pt]{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\draw (0, 0) coordinate(A)node[below left]{A}-- (0, 8)coordinate(B)node[above left]{B} -- (8, 8)coordinate(C)node[above right]{C} -- (8, 0)coordinate(D)node[below right]{D} --cycle;
\draw (B) -- (8, 4)coordinate(E)node[right]{E};
\draw (A) -- (C);
\coordinate (I) at (intersection of 0,8--E and A--C);
\fill[green](A)--(B)--(I)--cycle;
\fill[blue](B)--(C)--(I)--cycle;
\fill[red](C)--(E)--(I)--cycle;
\fill[violet](A)--(D)--(E)--(I)--cycle;
\end{tikzpicture}
\end{document}
编辑 2:相同Intersections of Arbitrary Paths
另一种可能性是使用intersections
手册 3.0.1a(p137;13.3.2 任意路径的交点)中记录的库,该库允许计算任意两条路径(直线或曲线)交点的坐标。
\documentclass[border=5pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{intersections}
\begin{document}
\begin{tikzpicture}
\draw (0, 0) coordinate(A)node[below left]{A}-- (0, 8)coordinate(B)node[above left]{B} -- (8, 8)coordinate(C)node[above right]{C} -- (8, 0)coordinate(D)node[below right]{D} --cycle;
\draw[name path=ae] (B) -- (8, 4)coordinate(E)node[right]{E};
\draw[name path=ac] (A) -- (C);
\path[name intersections ={of= ae and ac,by=I}];
\fill[green](A)--(B)--(I)--cycle;
\fill[blue](B)--(C)--(I)--cycle;
\fill[red](C)--(E)--(I)--cycle;
\fill[violet](A)--(D)--(E)--(I)--cycle;
\end{tikzpicture}
\end{document}
编辑 3:将节点放置在区域的中心
要将节点放置在区域的中心,可以使用重心坐标(p133,第 13.2.2 节重心系统)。
我放置了几个具有不同选项的节点,以便让您概览 TikZ 的可能性。
\documentclass[border=5pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{intersections,shapes.geometric}
\begin{document}
\begin{tikzpicture}
\draw (0, 0) coordinate(A)node[below left]{A}-- (0, 8)coordinate(B)node[above left]{B} -- (8, 8)coordinate(C)node[above right]{C} -- (8, 0)coordinate(D)node[below right]{D} --cycle;
\draw[name path=ae] (B) -- (8, 4)coordinate(E)node[right]{E};
\draw[name path=ac] (A) -- (C);
\path[name intersections ={of= ae and ac,by=I}];
\fill[green](A)--(B)--(I)--cycle;
\node[node font=\bf,ellipse,draw,fill=white,inner sep=1pt] at (barycentric cs:A=1,B=1.2 ,I=1.5) {Zone 1};
\fill[blue](B)--(C)--(I)--cycle;
\node[text=white,node font={\it\Large},draw=white,thick] at (barycentric cs:C=1,B=1 ,I=1) {Zone 2};
\fill[red](C)--(E)--(I)--cycle;
\node[fill=cyan,double=white,double distance=2pt,draw,rounded corners] at (barycentric cs:C=1,E=1 ,I=1) {Zone 3};
\fill[violet](A)--(D)--(E)--(I)--cycle;
\node[fill=white,circle] at (barycentric cs:A=1,D=1.4,E=1 ,I=1) {Zone 4};
\end{tikzpicture}
\end{document}
使用 www.DeepL.com/Translator 翻译
答案2
一个可能不太为人所知的可能性是使用 pgfplots 库fillbetween
。为了表明我没有覆盖不同的部分,我在动画中分别填充了每个部分。
\documentclass[tikz,border=3.14mm]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.16}
\usepgfplotslibrary{fillbetween}
\begin{document}
\foreach \X in {0,...,3}
{\begin{tikzpicture}
\draw[name path=box] (0, 0) -- (0, 8) -- (8, 8) -- (8, 0) --cycle;
\draw[name path=d1] (0, 8) -- (8, 4);
\draw[name path=d2] (0, 0) -- (8, 8);
\ifcase\X
\fill [blue,intersection segments={of=d1 and d2,
sequence={A0 -- B0[reverse]}}];
\or
\fill [blue,intersection segments={of=d1 and d2,
sequence={A0 -- B1}}];
\or
\fill [blue,intersection segments={of=d1 and d2,
sequence={A1[reverse] -- B1}}];
\or
\path [name path=aux,intersection segments={of=d1 and d2,
sequence={A1[reverse] -- B0[reverse]}}];
\fill [blue,intersection segments={of=aux and box,
sequence={A1 -- B2[reverse]}}];
\fi
\end{tikzpicture}}
\end{document}
答案3
fill
以下是后续方法clip
(不参考交点):
\documentclass[tikz,border=7pt]{standalone}
\begin{document}
\begin{tikzpicture}
\path
(0, 0) coordinate (A)
(8, 8) coordinate (C)
(8, 4) coordinate (E);
\begin{scope} % red zone : fill after clip
\clip (A) -- (A-|C) -- (C);
\clip (E)--(C)-- (A|-C);
\fill[red] (A) rectangle (C);
\end{scope}
\begin{scope} % yellow zone : fill after clip
\clip (A) -- (C) -- (A|-C);
\clip (A|-C)--(A)-- (A-|C)--(E);
\fill[yellow] (A) rectangle (C);
\end{scope}
\draw (A) rectangle (C) -- (A) (A|-C) -- (E);
\end{tikzpicture}
\end{document}