学忠

V1

2022/03/15阅读:75主题:红绯

Tikz 作图教程:使用tkz-uclide包作平面图形

Tikz 作图教程:使用tkz-uclide包作平面图形

各位Tikz 爱好者朋友们,大家好!前段时间比较忙,所以好久没有更文了!

今天在准备高等代数教案——子空间的直和时,需要画一个三维空间中的直和的例子和反例,作了如下的两个图:

下面我们简要介绍一下这两个图的作图步骤和要点。这两幅图是虽是立体图形,可是我们还是可以用tkz-uclide宏包来画。

作图步骤

对于 Tikz 基本命令不熟悉的朋友可以先阅读我们之前的推文,记住8个基本命令就可以入门了。

1. 定义点

定义点的 Tikz 命令是\coordinate(<name>)(<coordinate>);。例如 \coordinate (A) at (1,0);相当于将坐标 储存在字母 中,下面要引用这个坐标时,就可以用(A)来引用这个点了。

tkz-uclide宏包中定义了一个可以批量定义点的命令——\tkzDefPoints{},例如\tkzDefPoints{0/0/O,-2.25/-1.5/A,...}, 就可以将 分别储存在字母 O 和 A 中了,以后调用就用 (O),(A)

例如,上面作图中我们就定义了以下 10 个点:

 \tkzDefPoints{0/0/O, -2.25/-1.5/A, 4/0/B, 0/4/C, 2.2/-1.5/D, 2/3/E, -5/-1.7/F, 3/-1.7/G, 6/1.2/H, -1/1.2/I}

2. 连线

tkz-uclide宏包中的连线命令有\tkzDrawSegment []()\tkzDrawSegments[](), 第一个用于作一条线段,第二个用于作折线(多条线段首尾相连)。如果要做一个多边形就用\tkzDrawPolygon[]()来连线。这些命令的小括号中一次放代表点的字母就可以了,字母之间用英文逗号分隔。中括号里放一些属性参数如颜色、虚实线、粗细、箭头等等。

我们的例子在这里混用了Tikz命令,例如\draw[->](O)--(A);, 这在tkzuclide宏包是允许的。如果你想追求命令的统一性就用上面我们介绍的连线命令。 要注意的是,Tikz语句要以分号 ; 结束, 而 tkz-uclide 中的命令则不需要分号。

3. 添加标签

几乎每个图都需要对图中的几何元素——点、线、面添加适当的文字说明,就是标签。 我们用\tkzLabelPoint(){}Tikz中的基本命令node[]{}, 其中 ()中放点的坐标,{}中放标签内容,中括号里添加标签的位置如 left,right,above,below等。

一般地,通过以上三个步骤,就可以作出各种复杂的平面图几何形了。

难点提示

坐标的设定和计算是这类作图的难点。作者的经验是先设定一些基本的点的坐标,然后根据图形的相对位置关系来确定其余点的坐标。

例如上述的作图,坐标系的原点、三个坐标轴的终点就是基本点,而各向量的终点、水平平面平行四边形的四个顶点、以及标签的位置点都是根据相对关系来设定的。

又如右图中的代表两个平面的平行四边形是基本点,其余的向量的起点、终点以及标签的位置点都是根据相对关系确定的。

确定点的坐标还有很多方法,例如通过平移、旋转、反射等变换来确定点,也可以直接取曲线的交点、线段的中点等等。tkz-uclide提供了相关的命令。这些方法以后有机会再来介绍。

文中例子代码

\documentclass[margin=4pt,
convert,
  convert={
    outext=.png,
    command=\unexpanded{
      pdftocairo -r 600 -png \infile % 将生成的pdf文件转换为png图像
    }
  }
,margin=20pt]{standalone}
% 支持中文
\usepackage{ctex}

\usepackage{tkz-euclide}
\usepackage{pgfplots}
\pgfplotsset{compat=1.17}
\begin{document}

\begin{tikzpicture}[>=Stealth,scale=2]
  \tkzDefPoints{0/0/O, -2.25/-1.5/A, 4/0/B, 0/4/C, 2.2/-1.5/D, 2/3/E, -5/-1.7/F, 3/-1.7/G, 6/1.2/H, -1/1.2/I}
  \tkzDrawPolygon[fill=blue!10,draw=blue!15](F,G,H,I)
  \draw[->](O)node[below]{$O$}--(A);
  \draw[->](O)--(B);
  \draw[->](O)--(C)node[left]{$V_2$};
  \draw[->,red,thick](O)--node[left]{$\alpha_1$}(D);
  \draw[->,red,very thick](O)--node[left]{$\alpha$}(E);
  \draw[->,red,thick](D)--node[left]{$\alpha_2$}(E);
  \tkzLabelPoint(3,-1){$V_2$}
 \tkzLabelPoint(-1,-2){$\alpha=\alpha_1+\alpha_2$};
 \tkzLabelPoint(-1,-2.4){$V_1\oplus V_2= R^3$}
\end{tikzpicture}%
\hskip 2cm
%
\begin{tikzpicture}[>=Stealth,scale=2]
\tkzDefPoints{0/0/A, 3.8/0.5/B, 5.6/3.5/C, 2/3/D, 1/6/E, -1/3/F, 2.9/1.75/G, 0.5/3/H, 1/1.5/I, 2.4/3.25/J, 0.5/0.75/K, 1.5/2.25/L, 0/2.25/M, 3.4/2.5/N}
\tkzDrawPolygon(A,B,C,D,E,F,A)
\tkzDrawSegment[dashed](A,D)
\draw[->,red,thick](I)node[right]{$O$}--node[below]{$\alpha_2$}(G);
\draw[->,red,thick](I)--node[left]{$\alpha_1$}(H);
\draw[->,very thick,red](I)--node[above]{$\alpha$}(J);
\draw[red,thick](H)--(J)--(G);
\draw[blue,->,thick](I)--node[left]{$\beta$}(K);
\draw[blue,->,thick](I)--node[left]{$-\beta$}(L);
\draw[orange,->,thick](I)--node[left]{$\alpha_1^\prime$}(M);
\draw[orange,->,thick](I)--node[above]{$\alpha_2^\prime$}(N);
\draw[orange,thick](M)--(J)--(N);
\draw[blue,thick](K)--(M)--(H);
\draw[blue,thick](L)--(N)--(G);
\tkzLabelPoint(0.8,5.6){$V_1$}
\tkzLabelPoint(5,3.3){$V_2$}
\tkzLabelPoint(1.2,-0.2){$\alpha=\alpha_1+\alpha_2=\alpha_1^\prime+\alpha_2^\prime$};
\tkzLabelPoint(1.2,-0.6){$\alpha_1^\prime=\alpha_1+\beta, \alpha_2^\prime=\alpha_2-\beta$};
\tkzLabelPoint(1.2,-1){$V_1+ V_2= R^3$}
\end{tikzpicture}

\end{document} 

分类:

后端

标签:

后端

作者介绍

学忠
V1

大学数学老师