如何用 TikZ 绘制

如何用 TikZ 绘制

在此处输入图片描述

我想学习如何画这样的东西。你能告诉我怎么做吗?

答案1

这是你的起点。一如既往,一口一口地吃掉大象... 对图纸的所有相关片段重复此操作,最后将其合并为一幅图纸。

所以首先,只需关注一半,即正确的一半。您可以随时镜像它。为了更好地看到各个部分,我做了一些着色。 减半

接下来覆盖网格,例如通过Paint.netGimp其他程序。我们需要图纸中的某些点来铺平道路。 网格

对于网格,我使用了这个,因此现在可能是查找 pgfmanual 和其教程部分中的命令的好时机:

\documentclass[10pt,border=3mm,tikz]{standalone}
\usepackage{tikz}

\begin{document}
 \begin{tikzpicture}
    \draw (0,0) grid (5,10);
 \end{tikzpicture}
\end{document}

现在,让我们尝试近似黄金区域。我们只需要轮廓,不需要关心精度、重叠等。留到以后再考虑。

金的

让我们尝试通过近似蓝线和红线来模仿一种非常粗糙的形式。相关部分只是绘制两条路径:

    % ~~~ blue path ~~~~~~~~~~~
    \draw (0,6.2) -- (1.1,4.1) -- (1.2,2.7) -- (1.7,2.7) -- (1.5,1.9);
    % ~~~ red path ~~~~~~~~~~~
    \draw (0,6.4) -- (1.2,4.2) -- (2.1,3.9) -- (3.5,4.2) -- (1.8,1.9);  

其结果是: 粗

为了引入弯曲,我们可以指定出角和入角,如下所示:用 替换--to [out=260,in=95]手册提到了更多方法,例如贝塞尔式控件。做出选择。

最后结果: 美好的

代码,带有一些小的坐标移动(比较粗略和精细):

\documentclass[10pt,border=3mm,tikz]{standalone}
\usepackage{tikz}

\begin{document}

 \begin{tikzpicture}% ~~~ very coarse ~~~
    % ~~~ comment out or delete grid later ~~~
    \draw [help lines] (0,0) grid (7,13);
    
    % ~~~ blue path ~~~~~~~~~~~
    \draw (0,6.2) -- (1.1,4.1) -- (1.2,2.7) -- (1.7,2.7) -- (1.5,1.9);
    % ~~~ red path ~~~~~~~~~~~
    \draw (0,6.4) -- (1.2,4.2) -- (2.1,3.9) -- (3.5,4.2) -- (1.8,1.9);  
 \end{tikzpicture}


 \begin{tikzpicture}% ~~~ with bends ~~~
    % ~~~ comment out or delete grid later ~~~
    \draw [help lines] (0,0) grid (7,13);
    
    % ~~~ blue path ~~~~~~~~~~~
    \draw (0,6.2)   to [out=260,in=95] (1.1,4.1) 
                    to [out=5,in=55] (1.2,2.7) 
                    to [out=270,in=240](1.8,2.7) 
                    to [out=260,in=220] (1.7,1.9);
    % ~~~ red path ~~~~~~~~~~~
    \draw (0,6.4)   to [out=280,in=85] (1.2,4.2) 
                    to [out=10,in=105] (2.1,3.9) 
                    to [out=50,in=150] (3.5,4.2) 
                    to [out=-200,in=50] (1.8,1.9);  
 \end{tikzpicture}

\end{document}

附言:展望,如何继续

假设您知道如何绘制装饰品的(大部分)部分。如何将所有部分连接起来?

让我们介绍一下\pic元素,这样你就可以像这样写一些东西:\pic at (0,0) {halve};这样可以清理你的代码。你可以将所有内容移动到一个\tikzset{ }语句中,在halve该语句中定义此文件中的含义:

\begin{document}

\tikzset{% ~~~ all drawings needed for one halve ~~~~~~~~~
    halve/.pic={
     % ~~~ blue path ~~~~~~~~~~~
    \draw (0,6.2)   to [out=260,in=95] (1.1,4.1) 
...
    \draw (0,13) to [bend right] (1,12) -- (0,11);
    }
}

为了便于查看,我添加了 3 个虚拟形状,请参阅下面的最终代码。顺便说一句,这是使用 获得的方法closed pathescycle在涉及重叠时可能需要它,也许可以使用图层,就像在图形程序中一样:

    % ~~~ rightmost; example for closed path ~~~~
    \draw (5.5,3.8) -- (5.5,5.5) -- (6.5,4.8) -- cycle;

韋科

现在您可以将几个halves 放置在任何您想要的位置,包括缩放(transform shape也需要),请参阅最终代码:

部分一半

最后,整个对称装饰物怎么样?正如你可能猜到的,我们将定义另一个\pic,其中包括mirrored halve

\tikzset{% ~~~ putting two halves together ~~~~~~
    ornmnt/.pic={
        \pic at (0,0) {halve};
        \pic [xscale=-1] at (0,0) {halve};
    }
}

奥姆特

所有这些的最终代码:

\documentclass[10pt,border=3mm,tikz]{standalone}
\usepackage{tikz}

\begin{document}

\tikzset{% ~~~ all drawings needed for one halve ~~~~~~~~~
    halve/.pic={
     % ~~~ blue path ~~~~~~~~~~~
    \draw (0,6.2)   to [out=260,in=95] (1.1,4.1) 
                    to [out=5,in=55] (1.2,2.7) 
                    to [out=270,in=240](1.8,2.7) 
                    to [out=260,in=220] (1.7,1.9);
    % ~~~ red path ~~~~~~~~~~~
    \draw (0,6.4)   to [out=280,in=85] (1.2,4.2) 
                    to [out=10,in=105] (2.1,3.9) 
                    to [out=50,in=150] (3.5,4.2) 
                    to [out=-200,in=50] (1.8,1.9);  
    % ~~~ simple pattern at origin ~~~~~
    \draw (0,0) to [bend left] (1,1);
    % ~~~ rightmost; example for closed path ~~~~
    \draw (5.5,3.8) -- (5.5,5.5) -- (6.5,4.8) -- cycle;
    % ~~~ top ornament ~~~~~~~~~~~~~~~~~
    \draw (0,13) to [bend right] (1,12) -- (0,11);
    }
}
\tikzset{% ~~~ putting two halves together ~~~~~~
    ornmnt/.pic={
        \pic at (0,0) {halve};
        \pic [xscale=-1] at (0,0) {halve};
    }
}

% ~~~ (1) let's see the \pic {halve} ~~~~~~~~~~
 \begin{tikzpicture}% ~~~ with bends ~~~
    % ~~~ comment out or delete grid later ~~~
    \draw [help lines] (0,0) grid (7,13);   
    \pic at (0,0) {halve}; 
    \node [red] at (5,11.3) {one halve of the ornament};
 \end{tikzpicture}

% ~~~ (2) using \pic {halve} ~~~~~~~~~~~~~
 \begin{tikzpicture}% ~~~ with bends ~~~
    \pic at (0,0) {halve}; 
    
    \node [red] at (5,10) {one pic};
    \draw [dashed,gray] (8,0) -- (8,13);
    
    \pic at (8,0) {halve}; 
    \node [red] at (13,10) {one more pic};
    \draw [dashed,gray] (16,0) -- (16,13);
    
    \pic [scale=.5, transform shape] at (16,0) {halve};
    \node [red] at (19,10) {smaller pic};
 \end{tikzpicture}
 
% ~~~ (3) let's see the full ornament ~~~~~~~~
 \begin{tikzpicture}
    \pic at (0,0) {ornmnt};
 \end{tikzpicture}

\end{document}

答案2

对于这种复杂的东西,最好使用SVG-Path库导入 SVG 路径。

以下是我建议的步骤:

  1. 在 Illustrator 或 Inkscape 等 GUI 矢量图形编辑器中绘制轮廓(或从现有 SVG 导入)。
  2. 保存为 SVG。
  3. 在文本编辑器中打开 SVG 并复制d每个<path/>元素的属性文本(您也可以在 Inkscape 中执行此操作,而不需要先保存,不知道 Illustrator)。
  4. 将每个属性文本放在单独的\pgfpathsvg命令中,如下所示。
\usepgflibrary {svg.path}
\begin{pgfpicture}
  \pgfpathsvg{<path code 1 goes here>}
  \pgfusepath{stroke}
  \pgfpathsvg{<path code 2 goes here>}
  \pgfusepath{stroke}
  ...
\end{pgfpicture}

\draw您还可以将 SVG 路径作为 TikZ或命令中的路径规范\path

\usetikzlibrary {svg.path}
\begin{tikzpicture}
  \draw svg {<path code 1 goes here>};
  \draw svg {<path code 2 goes here>};
  ...
\end{tikzpicture}

当然,您也可以使用 将矢量图形(例如 PDF)包含在文档中\includegraphics。但是,如果您想对图形进行注释或执行其他操作,这可能是更好的选择。

答案3

用 LaTeX 做这种画既复杂又乏味。有一个软件包可以让你制作相同类型但不完全相同的预制装饰品,例如https://ctan.org/pkg/pgfornament

这是用这个包得到的装饰品 n°66,它看起来很像,但并不完全相同:

\documentclass{scrartcl}
\usepackage{pgfornament}
\begin{document}
\pgfornament{66}
\end{document}

页码 66

相关内容