我想在 tikz 中的帕斯卡三角形中绘制 30 行或更多行的谢尔宾斯基三角形,但我的代码仅适用于 13 行。
\documentclass{article}
\usepackage{tikz}
\usepackage{pdfpages}
\begin{document}
\begin{center}
\newdimen\R
\R=.4cm
\newcommand\mycolor{white}
\newcommand\thik{\pgflinewidth}
\begin{tikzpicture}[line width=.8pt]
\foreach \k in {0,...,13}{
\begin{scope}[shift={(-60:{sqrt(3)*\R*\k})}]
\pgfmathtruncatemacro\ystart{13-\k}
\foreach \n in {0,...,\ystart}{
\pgfmathtruncatemacro\newn{\n+\k}
%binomila ceeficients
\pgfmathsetmacro{\value}{1};
\ifthenelse{\k>0}{
\foreach \b in {1,...,\k}{
\pgfmathtruncatemacro{\value}{\value*(\newn-\b+1)/\b)};
\global\let\value=\value
}
}{};
\pgfmathtruncatemacro{\rest}{mod(\value,2)};
\ifthenelse{\rest=0}{\def\mycolor{green}}{}
\begin{scope}[shift={(-120:{sqrt(3)*\R*\n})}]
\draw[top color=\mycolor!20,bottom color=\mycolor!60]
(30:\R) \foreach \x in {90,150,...,330} {
-- (\x:\R)}
--cycle (90:0) node {\tiny $\mathbf{\value}$};
\end{scope}
}
\end{scope}
}
\end{tikzpicture}
\end{center}
\end{document}
答案1
欢迎来到 SE!这真的很有趣。
我重新熟悉了fp.sty
。我还对代码进行了格式化,使其更容易理解(缩进是你的朋友!)。我尝试了多达 35 行——当然可以更多。但请注意,随着行数的增加,编译所需的时间也会增加。我还将其制作成宏,以便于实验——和娱乐!
更新!
今天早上我起得很早,想玩一下我的新玩具。结果出现了一个 TeX 错误:尺寸太大。这很奇怪,因为我有输出图形来证明代码昨天运行得很好。显然,一夜之间,PGF 决定使用 来阻止它mod
。为了不被吓倒,我找到\modulo
了如何在 LaTeX 中计算 n 模 3?,我在这里使用了它。谢谢@Werner!StackExchange 万岁!!
输出不正确——也已更正。
\documentclass[tikz,border=0.25in]{standalone}
\usepackage{fp}
\newlength{\R}
\setlength{\R}{.75cm}
\newcommand\mycolor{white}
%% https://tex.stackexchange.com/questions/34424/how-do-i-calculate-n-modulo-3-in-latex/34425#34425
\newcommand{\modulo}[2]{%
\FPeval{\result}{trunc(#1-(#2*trunc(#1/#2,0)),0)}\result%
}
%% #1 determines which hexagons are filled (default is 2); #2 is number of rows
\newcommand{\makesierp}[2][2]{%
\begin{tikzpicture}[line width=.8pt]
\foreach \k in {0,...,#2}{
\begin{scope}[shift={(-60:{sqrt(3)*\R*\k})}]
\pgfmathtruncatemacro\ystart{#2-\k}
\foreach \n in {0,...,\ystart}{
\pgfmathtruncatemacro\newn{\n+\k}
\pgfmathsetmacro{\myvalue}{1}
\ifnum\k>0
\foreach \b in {1,...,\k}{
\FPeval\myvalue{trunc(\myvalue*(\newn-\b+1)/\b:0)}
\global\let\myvalue=\myvalue
}
\fi
\modulo{\myvalue}{#1}%
\ifnum\result=0 \def\mycolor{green}\fi%
\begin{scope}[shift={(-120:{sqrt(3)*\R*\n})}]
\draw[fill=\mycolor!20]
(30:\R) \foreach \x in {90,150,...,330} {
-- (\x:\R)}
--cycle (90:0)node[font=\tiny] {$\mathbf{\myvalue}$};
\end{scope}
}
\end{scope}
}
\end{tikzpicture}
}
\begin{document}
\makesierp{20}
\end{document}
第二幅图是用\makesierp[5]{20}
玩得开心!