TikZ 中的三角数(再次)

TikZ 中的三角数(再次)

我正在尝试使用 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));

相关内容