
Я пытаюсь создать диаграммы дробей для детей с помощью TikZ.
Есть ли элегантный способ исправить верхнюю часть этой диаграммы 1/2 таким образом, чтобы она масштабировалась, когда я захочу показать, скажем, 29/6 с треугольниками... и, в конечном итоге, другие фигуры? Кажется, что пересечения путей, которые встречаются под углами, отличными от 90 градусов, пересекаются не совсем так, как я хочу...
\documentclass{article}
\usepackage{tikz}
\usepackage{xcolor}
\begin{document}
\(\frac{1}{2}\)
\begin{tikzpicture}
\filldraw[fill=gray, draw=black, thick] (0,0)--(1,0)--(1,2)--cycle;
\draw[thick] (1,0)--(2,0)--(1,2)--cycle;
\end{tikzpicture}
\end{document}
решение1
Я не уверен, что это то, что вы хотите, но, глядя на изображение по ссылке, кажется, что это так: Я позаимствовал часть кода изIgnasi's answer
кКак нарисовать треугольную сетку в TikZ?. Поскольку треугольная сетка построена с помощью \node
s, вы можете легко использовать их якоря для заполнения, которое я поместил в background
слой:
Код:
\documentclass[tikz,border=2mm]{standalone}
\usetikzlibrary{shapes,backgrounds}
\newcommand\grid[1]{
\foreach \i [count=\row from 0, remember=\row as \lastrow (initially 0)] in {0,...,#1}
{
\foreach \j [count=\column from 0, remember=\column as \lastcolumn (initially 0)] in {0,...,\i}
{
\ifnum\row=0
\node[tri](0-0) {};
\else
\ifnum\column=0
\node[tri, anchor=north](\row-0) at (\lastrow-0.corner 2) {};
\else
\node[tri, anchor=north](\row-\column) at (\lastrow-\lastcolumn.corner 3) {};
\fi
\fi
}
}
}
\begin{document}
\begin{tikzpicture}[
tri/.style={
draw,
regular polygon,
regular polygon sides=3,
minimum size=2cm,
inner sep=0pt,
outer sep=0pt,
line width=1pt
}
]
\grid{3}
\begin{pgfonlayer}{background}
\filldraw[cyan!30]
(0-0.corner 1) --
(3-3.corner 3) --
(3-0.corner 2) --
cycle;
\end{pgfonlayer}
\begin{scope}[xshift=8cm]
\grid{3}
\begin{pgfonlayer}{background}
\filldraw[cyan!30]
(3-0.corner 1) --
(3-3.corner 1) --
(3-3.corner 3) --
(3-0.corner 2) --
cycle;
\end{pgfonlayer}
\end{scope}
\begin{scope}[yshift=-8cm]
\grid{3}
\begin{pgfonlayer}{background}
\filldraw[cyan!30]
(2-0.corner 1) --
(2-2.corner 1) --
(3-1.corner 3) --
cycle;
\end{pgfonlayer}
\end{scope}
\begin{scope}[xshift=8cm,yshift=-8cm]
\grid{3}
\begin{pgfonlayer}{background}
\filldraw[cyan!30]
(0-0.corner 1) --
(3-1.corner 3) --
(3-0.corner 2) --
cycle;
\end{pgfonlayer}
\draw[line width=1pt]
(0-0.corner 1) -- (3-1.corner 3);
\end{scope}
\end{tikzpicture}
\end{document}
решение2
Один из способов — сначала заполнить, а затем нарисовать один контур:
\documentclass[tikz,border=10pt]{standalone}
\begin{document}
\begin{tikzpicture}
\fill [fill=gray] (0,0)--(1,0)--(1,2)--cycle;
\draw[thick] (0,0) -- (1,2) edge (1,0) -- (2,0) -- cycle;
\end{tikzpicture}
\end{document}
Что такое edge
?
An edge
— это независимый кусок пути, который может отходить в другом направлении и может быть нарисован (или не нарисован) с совершенно другими параметрами из основного пути. Он не нарушает основной путь. В этом случае рисует edge
перпендикуляр вниз, но основной путь продолжается от вершины, как если бы не edge
было указано. edge
s полезны для сложных путей, особенно. Они строятся после основного пути.
Чтобы увидеть, что происходит, измените указанный путь следующим образом:
\draw[thick] (0,0) -- (1,2) edge [red] (1,0) -- (2,0) -- cycle;
По умолчанию edge
наследует параметры от основного пути, поэтому этот есть , thick
но, в отличие от основного пути, это red
. На изображении выше, конечно, не было указано никаких отдельных параметров, поэтому edge
также был цветом по умолчанию и смешивался с основным путем.