更新

更新

圣诞节快到了,给我看看你用 Tikz 制作的最好的雪花 :)

在此处输入图片描述

\documentclass{standalone}

\usepackage{tikz}
\usetikzlibrary{decorations.fractals}
\usepackage{pgfplots}

\begin{document}

\begin{tikzpicture}[decoration=Koch snowflake]
    \draw decorate{decorate{decorate{decorate{(0,0) -- (3,0)}}}};
    \draw decorate{decorate{decorate{decorate{(3,0) -- (1.5,-3)}}}};
    \draw decorate{decorate{decorate{decorate{(1.5,-3) -- (0,0)}}}};
\end{tikzpicture}

\begin{tikzpicture}
\begin{axis}[axis lines=none]
\addplot+[domain=0:2*pi,samples=1000,mark=none, color=black]
({10*cos(deg(x)) + 2*cos(deg(4*deg(x))) +  2*cos(deg(10*deg(x)))},
{10*sin(deg(x)) + 2*sin(deg(4*deg(x))) +  2*sin(deg(10*deg(x)))});
\end{axis}
\end{tikzpicture}

\end{document}

编辑 :

在此处输入图片描述

\documentclass{standalone}

\usepackage{tikz}
\usepackage{pgfplots}
\usetikzlibrary{shadings}
\definecolor{LightBlack}{rgb}{.4,.4,.4}
\definecolor{SoftBlack}{rgb}{.2,.2,.2}

\begin{document}

\begin{tikzpicture}
\fill[top color=LightBlack,bottom color=SoftBlack] (-1,6) rectangle (8,0);
\begin{axis}[axis lines=none]
\addplot+[domain=0:2*pi,samples=37,mark=none, color=white]
({10*cos(10*deg(x)) + 1*cos(2*deg(x)) +  0.2*cos(deg(x)) + 0.1 * cos(0.5*deg(x))},
{10*sin(10*deg(x)) + 1*sin(2*deg(x)) +  0.2*sin(deg(x)) + 0.1 * sin(0.5*deg(x))});
\end{axis}
\end{tikzpicture}

\end{document}

答案1

我认为最好的方法是使用 Lindenmayer 系统。

以下代码定义了用于绘制雪花单个“臂”的 Lindenmayer 规则。我认为“臂”对称至关重要。然后重复此臂,每次旋转 60 度,以产生完整的雪花。

改变 Lindenmayer 规则、规则+和所转的角度-以及线宽,会产生惊人数量的可能性。不幸的是,这些图形需要时间来编译,因此在尝试其他规则之前我变得不耐烦,我决定发布初步结果。但使用这些参数非常有趣,我可能会回来设计更多设计 :-)

下图仅使用了两条规则,我将其命名为“A”和“B”:

  1. 规则AF -> FF[+F][-F]
  2. 规则 BF -> ffF[++FF][--FF]

雪花

每行雪花的规则和角度相同,不同的外观只是由于线宽的变化。每行的规则和角度如下:

  • 第 1 行。规则 A,角度 60
  • 第 2 行。规则 A,角度 90
  • 第 3 行。规则 B,角度 60
  • 第 4 行。规则 B,角度 30

这是代码:

\documentclass{article}
\usepackage{tikz,nopageno}
\usetikzlibrary{lindenmayersystems}

\pgfdeclarelindenmayersystem{A}{
    \rule{F -> FF[+F][-F]}
}

\pgfdeclarelindenmayersystem{B}{
    \rule{F -> ffF[++FF][--FF]}
}

\tikzset{
    type/.style={l-system={#1, axiom=F,order=3,step=4pt,angle=60},
      blue, opacity=0.4, line width=.5mm, line cap=round   
    },
}

\newcommand\drawsnowflake[2][scale=0.2]{
    \tikz[#1]
    \foreach \a in {0,60,...,300}  {
    \draw[rotate=\a,#2] l-system;
    };
}

\begin{document}
\foreach \width in {.2,.4,...,.8} 
{  \drawsnowflake{type=A, line width=\width mm} }

\foreach \width in {.2,.4,...,.8} 
{  \drawsnowflake[scale=0.3]{type=A, l-system={angle=90}, line width=\width mm} }    

\foreach \width in {.2,.4,...,.8} 
{  \drawsnowflake[scale=0.3]{type=B, line width=\width mm} }

\foreach \width in {.2,.4,...,.8} 
{  \drawsnowflake{type=B, l-system={angle=30}, line width=\width mm} }

\end{document}

我也必须玩公理!:-)

更新

灵感来自Torbjørn T. 建议的页面,我尝试重现第一个:

雪

为此我采用了一条新规则:

\pgfdeclarelindenmayersystem{C}{
    \symbol{G}{\pgflsystemdrawforward}
    \rule{F -> F[+F][-F]FG[+F][-F]FG}
}

雪花是用以下材料画出来的:

\drawsnowflake[scale=0.2]{type=C, l-system={order=2}, line width=0.2mm}
\drawsnowflake[scale=0.2]{type=C, l-system={order=2}, line width=0.4mm}

更新:玩转公理

如果我们从不同于简单的公理开始,那么上例中使用的相同规则 (C) 可以产生不同的变化F

变化

我设计了一条新规则,旨在生产“板”类型的薄片,它还可以根据公理产生有趣的变化。这是规则:

\pgfdeclarelindenmayersystem{D}{
    \symbol{G}{\pgflsystemdrawforward}
    \symbol{H}{\pgflsystemdrawforward}
    \rule{F -> H[+HG][-HG]G}
    \rule{G -> HF}
}

以下是一些变化:

\drawsnowflake[scale=0.5]{type=D, l-system={order=4,angle=60,axiom=GF}, line width=0.7mm}
\drawsnowflake[scale=0.5]{type=D, l-system={order=4,angle=60,axiom=GfF}, line width=0.7mm}
\drawsnowflake[scale=0.5]{type=D, l-system={order=4,angle=60,axiom=FG}, line width=0.7mm}
\drawsnowflake[scale=0.5]{type=D, l-system={order=4,angle=60,axiom=FfG}, line width=0.7mm}

盘子

答案2

\documentclass{standalone}
\usepackage{tikz}
\usepackage{bbding} 
\usepackage[weather]{ifsym}
\begin{document}
    \begin{tikzpicture}
        \draw node[font=\fontsize{70}{70}]{\Snowflake\quad\SnowflakeChevron\quad\SnowflakeChevronBold\quad\Snow};
    \end{tikzpicture}
\end{document}

在此处输入图片描述


在此处输入图片描述

答案3

对输出不是很自豪...但是懒得手动输入一些不错的配置文件坐标=)

\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{shadows}
\newcommand{\profile}[1][]{
    \pgfmathsetseed{1234}
    \draw[snowflake,#1] (0:rnd) 
        \foreach \i in {1,...,10}{
            -- (rnd*15:rnd*3+\i)
        }
        -- ++(0:1) -- (0:15)
        \foreach \i in {15,...,20}{
            -- (rnd*15:rnd*7+\i)
        }
        -- ++(0:3)
        \foreach \i in {1,3,...,30}{
            -- (\i-rnd*3:30-rnd*3)
        }
        \foreach \i in {20,...,1}{
            -- (30-rnd*10:rnd*3+\i)
        };
}

\begin{document}
    \begin{tikzpicture}[
        snowflake/.style={
            fill=blue!10,
            draw=blue!40,
            drop shadow={shadow scale=1.01,shadow xshift=.6},
            line join=round,
            line cap=round,
            line width=5pt,
        }
    ]
    \foreach \a in {0,60,...,360}{
        \begin{scope}[rotate=\a]
            \profile
            \profile[cm={-1,0,0,1,(0,0)}]
        \end{scope}
    }
    \end{tikzpicture}
\end{document}

通过改变种子,您会得到不同的雪花...祈祷吧!

雪花

相关内容