shape
如何用颜色填充两个位置之间的部分?有没有使用“路径图片”等的简单方法?
附言:·我知道这个任务有例子,但这些例子大多是路径,而不是形状。
·是的,应该有一个强力解决方案(通过画弧)在这种情况下也一样。
但是我问自己,除了设置一些键等之外,是否还有其他优雅的方法。
我需要填充大量的部分,我正在寻找一种系统的方法,而不是如何快速创建所示的图片(注意:这只是一个例子)。
梅威瑟:
\documentclass[]{book}
\usepackage{tikz}
\usetikzlibrary{shapes}
\begin{document}
\begin{tikzpicture}[font=\tiny\sffamily, very thin]
\node[rounded rectangle, draw, inner sep=0pt,
line width=5mm,
minimum width=40mm, minimum height=20mm,
](s){*};
\draw[brown] (s.center) -- +(s.0);
\draw[red] (s.center) -- ++(s.north east) -- ++(0,-10mm-2.5mm);
\draw[red] (s.center) -- ++(s.north east) -- ++(0,-10mm-2.5mm);
\end{tikzpicture}
\end{document}
答案1
我有时间思考一些更好的、更模块化的东西,我希望它能回答你的问题。
我用了一个pic
我将其定义为:
\begin{tikzpicture}[
dashedrect/.pic={
\draw [red] (0,0) -- (1,0) -- (1,1) -- (0,1) -- cycle; % draw the red rect
\draw [dash pattern= #1]
(0,0) -- (1,0) -- (1,1) -- (0,1) -- cycle;
}
]
图片表示根据 4 个点定义的路径绘制一个矩形。该参数#1
将用于发送值dash pattern
。
然后我可以像这样在坐标或节点上绘制图片:
\coordinate (s) at (0,0);
\pic at (s) {dashedrect=on 20 off 10};
\pic at (2,2) {dashedrect= on 5 off 25 on 10};
我可以在图片内画任何东西。那么我们来改变图片的定义:
\begin{tikzpicture}[
font=\tiny\sffamily,
very thin,
dashedrect/.pic={ % <-- defined a pic
\draw [thick,red]
(0,0) arc[radius=0.5cm, start angle=270, end angle=90] -- (1,1) arc[radius=0.5cm, start angle=90, end angle=-90] (1,0) -- (0,0);
\draw [thick,dash pattern= #1]
(0,0) arc[radius=0.5cm, start angle=270, end angle=90] -- (1,1) arc[radius=0.5cm, start angle=90, end angle=-90] (1,0) -- (0,0);
}
]
\coordinate (s) at (0,0);
\pic at (s) {dashedrect=on 20 off 10};
\pic at (2,2) {dashedrect= on 5 off 25 on 10};
\end{tikzpicture}
我可以继续在图片中绘制任何东西。
答案2
我找到了一个解决方案clip
:
\documentclass[margin=5mm, tikz]{standalone}
\usepackage{tikz}
\usetikzlibrary{shapes}
\begin{document}
\begin{tikzpicture}[
mystyle/.style={rounded rectangle, draw, inner sep=0pt,
line width=5mm,
minimum width=40mm, minimum height=20mm, },
]
% Main node
\node[mystyle](s){*};
% Help Lines
\draw[brown] (s.center) -- +(s.0);
\draw[brown] (s.center) -- +(s.north east);
% Colored Part
\begin{scope}[]
\clip (s.0) rectangle (s.north east);
\node[mystyle, red](s colored part){*};
\end{scope}
\end{tikzpicture}
\end{document}