我最后问的一个问题证书我得到了很好的答案。现在我的问题是,是否可以在 TikZ 中重新创建如下所示的扭索纹:
或者可能是像
答案1
扭索纹(Guilloche)是一种装饰性雕刻技术,其中非常精确、复杂的重复图案或设计以精细的细节机械雕刻到底层材料上。具体来说,它涉及一种机刻技术,法语中称为扭索纹,以法国工程师“Guillot”命名,他发明了一种机器,“可以在金属表面上刻出精细的图案和设计
问题是在圆内画一条有固定点的曲线
方法一:我使用 tkz-fct 因为它是我的包而且我知道它但是只使用 tikz 很容易创建同样的东西。(这里你需要 gnuplot)
\documentclass[11pt]{scrartcl}
\usepackage[dvipsnames]{xcolor}
\usepackage{tkz-fct}
\begin{document}
\def\spirographlike#1{%
\def\repeatno{#1}
\foreach \i in {1,...,\repeatno}
{%
\begin{scope}[rotate=360/\repeatno*\i]
\mycloedcurve
\end{scope}}%
}
\def\mycloedcurve{\tkzFctPolar[color=MidnightBlue,thick,domain=0:2*pi,samples=400]{ 1+cos(3*t)+(sin(3*t))**2}}
\noindent\begin{tikzpicture}
\mycloedcurve
\end{tikzpicture}
\begin{tikzpicture}[scale=2]
\tkzInit [xmin=-5,xmax=5,ymin=-5,ymax=5]
\spirographlike{40}
\end{tikzpicture}
\end{document}
更新
这样比较好,但你需要一些时间来编译
\documentclass[11pt]{scrartcl}
\usepackage[dvipsnames]{xcolor}
\usepackage{tkz-fct}
\begin{document}
\def\spirographlike#1{%
\def\repeatno{#1}
\foreach \i in {1,...,\repeatno}
{%
\begin{scope}[rotate around={360/\repeatno*\i:(.5,0)}]
\mycloedcurve
\end{scope}}%
}
\def\mycloedcurve{\tkzFctPolar[color=MidnightBlue,thick,domain=0:2*pi,samples=400]{ 1+cos(3*t)+(sin(3*t))**2}}
\begin{tikzpicture}
\mycloedcurve
\end{tikzpicture}
\begin{tikzpicture}[scale=2]
\tkzInit [xmin=-5,xmax=5,ymin=-5,ymax=5]
\spirographlike{20}
\end{tikzpicture}
\end{document}
答案2
以下是绘制“直线”部分的一种方法。(对于经验丰富的人来说可能有点粗糙……)
TikZ
编译时间肯定会考验我们中最有耐心的人,但做这样的事情也是意料之中的……:)
我只从我在以下网站找到的样本中绘制了一个这样的样本数学世界。有一些样本可供下载。它们(如下图所示)是许多正弦波的总和,让它们完美地结合在一起的基本技巧是控制“频率”和“初始相位”。
以下是代码:
\documentclass[12pt,a4paper]{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[very thin]
\foreach \n in {0,...,19}
{
\foreach \x [remember=\x as \lastx (initially 0)] in {0.01,0.02,...,6.28}
{
\draw [red] (\lastx*2,{(4+sin(5*(180*\lastx/pi)))+((7+sin(7*(180*\lastx/pi)))-(4+sin(5*(180*\lastx/pi))))*(1+sin(5*(180*\lastx/pi)+\n*20))/2}) -- (\x*2,{(4+sin(5*(180*\x/pi)))+((7+sin(7*(180*\x/pi)))-(4+sin(5*(180*\x/pi))))*(1+sin(5*(180*\x/pi)+\n*20))/2});
}
}
\end{tikzpicture}
\end{document}
正如您所看到的,我不得不重新调整一下坐标,主要是因为源公式使用了弧度和度数......另外,为了好看,TikZ
我还沿着轴拉伸了一点东西。x
经过一段时间后,你会发现结果如下:
更快的代码:
这个想法是重用前一个坐标,而不是使用 重新计算它\lastx
。此外,这意味着将只有{0,...,19}
绘制命令,而不是20\times6.29/0.01=12580
。
此功能通过执行内联 for 循环来使用。
因此你应该这样做:
\begin{tikzpicture}[very thin]
\foreach \n in {0,...,19} {
\draw [red] (0,{(4+sin(5*(0)))+((7+sin(7*(0)))-(4+sin(5*(0))))*(1+sin(5*(0)+\n*20))/2})
\foreach \x in {0.01,0.02,...,6.28} {
-- (\x*2,{(4+sin(5*(180*\x/pi)))+((7+sin(7*(180*\x/pi)))-(4+sin(5*(180*\x/pi))))*(1+sin(5*(180*\x/pi)+\n*20))/2})
}; % <- Here the \draw ends
}
\end{tikzpicture}
为了进一步提高速度,角度的计算可以更加明确,并且可以采用更短的表达式:
\begin{tikzpicture}[very thin]
\foreach \n in {0,...,19} {
\draw [red] (0,{4+(7-4)*(1+sin(\n*20))/2})
\foreach \x in {0.5,1,...,360} {
-- ({6.28318*\x/180},{4+sin(5*\x)+(7+sin(7*\x)-(4+sin(5*\x)))*(1+sin(5*\x+\n*20))/2})
};
}
\end{tikzpicture}
作为最后的优化,所有可以减少的变量都应该减少,这不会给出太多,因为它是简单的乘法和除法:
\begin{tikzpicture}[very thin]
\foreach \n [evaluate={\n*20} as \ntwenty] in {0,...,19} {
\draw [red] (0,{5.5+1.5*sin(\ntwenty))})
\foreach \x [evaluate={sin(5*\x)} as \sfx] in {0.5,1,...,360} {
-- ({0.034906585039886591*\x},{4+\sfx+(3+sin(7*\x)-\sfx)*(1+sin(5*\x+\ntwenty))/2})
};
}
\end{tikzpicture}
实际上,编译器的速度提高了一倍,最后的速度更快,当从 更改为 时,evaluate
没有\pgfextra\pgfmathparse{sin(5*\x)}\edef\sfx{\pgfmathresult}\endpgfextra
任何增益,因此没有显示:
- 1分59.699秒
- 0分59.100秒
- 0分43.627秒
- 0分38.714秒
答案3
使用 TikZ 创建扭索纹的另一种方法是使用第三方工具将它们生成为图形文件,然后使用常用的方法将它们导入到您的文档中\includegraphics{…}
。
我知道以下扭索饰纹工具:
GuardSoft Cerberus
适用于 Microsoft Windows 的复杂专有扭索纹工具,可导出到 PostScript。网站上没有列出价格,但我知道它非常昂贵(数千美元)。
埃克森特罗
另一款专有的 Guilloché 生成器,适用于 Mac OS,售价 500 美元。还有一个“精简版”售价 25 美元。支持位图和 PDF 输出。
扭索纹图案生成器
一款免费的 Adobe Flash 应用程序,您可以通过网络浏览器使用它。您只需选择所需的前景色和背景色,然后调整一系列滑块来控制图案的大小和形状。按 即可将图案保存为 JPEG 图像S
。如果您的系统有输出 PDF 文件的打印机驱动程序,那么您可以通过右键单击并选择“打印 Guilloche”来打印矢量化 PDF。(我自己还没有测试过。)
矢量化器
用 HTML 和 JavaScript 重新实现 subblue 的 Guilloché 图案生成器。它可以将图像输出为 PNG 或 SVG 图形。(然后您可以使用您最喜欢的图形转换器,例如Inkscape或者韓國,将 SVG 转换为 PDF 或 EPS 以供 LaTeX 使用。)