我想用颜色填充一个多边形。首先,应该将 n 个多边形分成 n 个相等的部分。我发现了一个类似的问题: 绘制多边形 @Yori 的解决方案几乎就是我想要的。所以我希望例如 8 多边形中的 1、3、5 部分是彩色的,或者 13 多边形中的 2、3、4、5、9 部分是彩色的。
要调整的代码(不是我的)可能是:
\documentclass{standalone}
\usepackage{tikz}
\newcommand\polygon[2][]{
\pgfmathsetmacro{\angle}{360/#2}
\pgfmathsetmacro{\startangle}{-90 + \angle/2}
\pgfmathsetmacro{\y}{cos(\angle/2)}
\begin{scope}[#1]
\foreach \i in {1,2,...,#2} {
\pgfmathsetmacro{\x}{\startangle + \angle*\i}
\draw[fill=blue!35] (0, 0) -- (\x:1 cm) -- (\x + \angle/2:\y cm) -- cycle;
\draw[fill=blue!50] (0, 0) -- (\x + \angle/2:\y cm) -- (\x + \angle:1 cm) -- cycle;
}
\end{scope}
}
\begin{document}
\begin{tikzpicture}
\polygon{5}
\polygon[xshift=2.2cm]{6}
\polygon[xshift=4.4cm]{7}
\polygon[xshift=6.6cm]{8}
\end{tikzpicture}
\end{document}
(学生必须按百分比计算出哪部分是彩色的)
答案1
我迟到了(问题已经回答了),但我采用了不同的方法,这在其他场景中也许有用(对于这个,汤姆的回答更简单,更好)。
我的方法是定义一组名为color1
、color2
等的颜色,其数量最多colorN
为N
多边形角数的两倍。这些颜色代表应用于每个三角形的颜色。最初所有颜色都定义为相同,但随后其中一些颜色(要以不同方式填充的颜色)被重新定义。这允许在一个简单的循环中绘制整个多边形,一次绘制一个三角形,使用fill=colorX
,作为X
该三角形的编号。
代码:
\documentclass{standalone}
\usepackage{tikz}
\usepackage{xcolor}
\globalcolorstrue
\newcommand\polygon[5][]{
\pgfmathtruncatemacro{\x}{2*#2}
\foreach \c in {0,1,...,\x}{
\colorlet{color\c}{#3}
}
\foreach \c in {#4} {
\colorlet{color\c}{#5}
}
\pgfmathsetmacro{\angle}{360/#2}
\pgfmathsetmacro{\startangle}{-90 + \angle/2}
\pgfmathsetmacro{\y}{cos(\angle/2)}
\begin{scope}[#1]
\foreach \i in {1,2,...,#2} {
\pgfmathsetmacro{\x}{\startangle + \angle*\i}
\pgfmathtruncatemacro{\colorA}{\i*2}
\pgfmathtruncatemacro{\colorB}{\i*2-1}
\draw[fill=color\colorB] (0, 0) -- (\x:1 cm) -- (\x + \angle/2:\y cm) -- cycle;
\draw[fill=color\colorA] (0, 0) -- (\x + \angle/2:\y cm) -- (\x + \angle:1 cm) -- cycle;
}
\end{scope}
}
\begin{document}
\begin{tikzpicture}
\polygon{5}{blue!20}{1,...,5}{blue!60}
\polygon[xshift=2.2cm]{6}{red!20}{7,8,9}{red}
\polygon[xshift=4.4cm]{7}{green!20}{5,6,...,12}{green}
\polygon[xshift=6.6cm]{8}{yellow!30}{1,2,5,7}{orange!70}
\end{tikzpicture}
\end{document}
结果:
答案2
只需添加一些用于填充颜色和要填充的图块的参数:
代码
\documentclass[tikz, border=2mm]{standalone}
\newcommand\polygon[5][]%
% 1: options for scope
% 2: num corners
% 3: size
% 4: colored tiles
% 5: fill color
{ \pgfmathsetmacro{\angle}{360/#2}
\pgfmathsetmacro{\startangle}{-90 + \angle/2}
\pgfmathsetmacro{\y}{cos(\angle/2)}
\begin{scope}[#1]
\foreach \i in {#4}
{ \pgfmathsetmacro{\x}{\startangle + \angle*\i}
\fill[#5] (0, 0) -- (\x:#3) -- (\x + \angle:#3) -- cycle;
}
\foreach \i in {1,2,...,#2}
{
\pgfmathsetmacro{\x}{\startangle + \angle*\i}
\draw (0, 0) -- (\x:#3) -- (\x + \angle:#3) -- cycle;
}
\end{scope}
}
\begin{document}
\begin{tikzpicture}
\polygon{6}{1}{1,4}{cyan}
\polygon[xshift=3cm]{7}{2}{1,2,4,7}{magenta}
\polygon[xshift=8cm]{8}{3}{5,6,1,4}{yellow}
\end{tikzpicture}
\end{document}
输出
答案3
另一个版本允许您单独指定颜色:
\documentclass{standalone}
\usepackage{tikz}
\newcommand\polygon[2][]{
% Count input length.
\pgfmathsetmacro{\n}{0}
\foreach \color in {#2} {
\pgfmathsetmacro{\n}{\n+1}
\global\let\n=\n
}
% Draw polygon.
\pgfmathsetmacro{\angle}{360/\n}
\pgfmathsetmacro{\startangle}{-90 + \angle/2}
\begin{scope}[#1]
\pgfmathsetmacro{\x}{\startangle}
\foreach[count=\i] \color in {#2} {
\pgfmathsetmacro{\x}{\startangle + \angle*\i}
\draw[fill=\color] (0, 0) -- (\x:1 cm) -- (\x + \angle:1 cm) -- cycle;
}
\end{scope}
}
\begin{document}
\begin{tikzpicture}
\polygon{blue!50, red!50, green!50, blue!50, red!50, green!50, blue!50, red!50, green!50}
\end{tikzpicture}
\end{document}
答案4
另一个使用regular polygons
和pics
。
\documentclass[tikz,border=2mm]{standalone}
\usetikzlibrary{shapes.geometric}
\begin{document}
\tikzset{
pics/polygon/.style n args = {3}{
code = {
\node[regular polygon, regular polygon sides=#1,
minimum size=4cm, draw,
outer sep=0pt] at (0,0) (-node){};
\foreach \i [evaluate=\i as \next using {ifthenelse(\i+1>#1,1,int(\i+1))}] in {#2}{
% \typeout{\i,\next}
\draw[fill=#3] (-node.corner \i)
--(-node.corner \next)--(-node.center)--cycle;}
}
}
}
\begin{tikzpicture}
\draw pic (a) {polygon={5}{1,3,2}{red}};
\draw (4,0) pic (a) {polygon={7}{1,3,2}{green}};
\draw (0,4) pic (a) {polygon={10}{1,3,2}{cyan}};
\draw (4,4) pic (a) {polygon={4}{1,3,2}{orange}};
\end{tikzpicture}
\end{document}