我正在尝试使用 TikZ 重新创建以下三角数(一个较大三角形内的较小三角形)的图表。
颜色并不重要,但白色和灰色可能是首选。
我尝试修改使用的代码这里它产生了一个三角形网格,但没有成功(我不知道如何在一个图中生成多个网格,也无法以所示的交替模式对三角形进行阴影处理),这就是我没有包含任何 MWE 的原因。
理想情况下,代码应该足够灵活,可以选择所需的较大三角形的数量(上图显示了 6 个)。
答案1
\documentclass{standalone}
\usepackage{tikz}
\newcommand\triangles[2]{\def\w{#1}\foreach\n in{1,...,#2}{\path
([xshift=\w]current bounding box.south east)coordinate(O);
\foreach\s[count=\c]in{\n,...,1}{\foreach\m in{1,...,\s}{
\fill[green!50!black](O)++(60:{(\c-1)*\w})++(0:{(\m-1)*\w})--
++(60:\w)--++(-60:\w)--cycle;}}}}
\begin{document}
\begin{tikzpicture}\triangles{3mm}{8}\end{tikzpicture}
\end{document}
答案2
一个小修改Ignasi 对你提到的问题的回答:
\documentclass[tikz,border=5mm]{standalone}
\usetikzlibrary{shapes}
\tikzset{
tri/.style={
draw=none,
fill=black!50,
regular polygon,
regular polygon sides=3,
minimum size=2cm,
inner sep=0pt,
outer sep=0pt
}
}
\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=corner 2](\row-0) at (\lastrow-0.corner 3) {};
\else
\node[tri, anchor=corner 2](\row-\column) at (\lastrow-\lastcolumn.corner 1) {};
\fi
\fi}}
}
\begin{document}
\begin{tikzpicture}
\foreach \x in {0,...,5}
{
\begin{scope}[xshift=2*\x cm + \x*\x cm]
\grid{\x}
\end{scope}
}
\end{tikzpicture}
\end{document}
答案3
几乎同样紧凑元帖子...
\RequirePackage{luatex85}
\documentclass[border=5mm]{standalone}
\usepackage{luamplib}
\begin{document}
\mplibtextextlabel{enable}
\begin{mplibcode}
beginfig(1);
picture trig;
trig = image(fill origin -- right -- right rotated 60 -- cycle withcolor 1/2 white);
for k=1 upto 7:
for j=1 upto k:
for i=1 upto j:
draw trig
shifted (1/2(k+1)*k + 1/2(k-j) + i, sqrt(3/4)*(k-j))
scaled 5mm;
endfor
endfor
endfor
endfig;
\end{mplibcode}
\end{document}
这里的诀窍是scaled 5mm
同时缩放三角形图像和其移动量。
答案4
使用渐近线:对于特定的三角形
// http://asymptote.ualberta.ca/
size(6cm);
int n=8;
path p=(0,0)--(1,0)--dir(60)--cycle;
for (int i=0; i<n; ++i)
for (int j=0; j<n-i; ++j)
fill(shift(i*dir(60)+(j,0))*p,purple);
对于一系列三角形:我们可以创建一个函数,返回一个带有其大小参数的图片,并将其添加到当前图片中add(alttriangle());
(默认n=8
),或add(alttriangle(5));
,或add(alttriangle(n=5));
// http://asymptote.ualberta.ca/
size(12cm);
picture alttriangle(int n=8){
picture temp;
path p=(0,0)--(1,0)--dir(60)--cycle;
for (int i=0; i<n; ++i)
for (int j=0; j<n-i; ++j)
fill(temp,shift(i*dir(60)+(j,0))*p,purple);
return temp;
}
int n=7;
for (int i=1; i<n; ++i)
add(shift(i*(i+1)/2,0)*alttriangle(i));
//shipout(bbox(5mm,invisible));