各位Tikz 爱好者朋友们,大家好!前段时间比较忙,所以好久没有更文了!
今天在准备高等代数教案——子空间的直和时,需要画一个三维空间中的直和的例子和反例,作了如下的两个图:
下面我们简要介绍一下这两个图的作图步骤和要点。这两幅图是虽是立体图形,可是我们还是可以用tkz-uclide
宏包来画。
作图步骤
掌握八大Tikz 作图工具,Tikz 入门 So easy
对于 Tikz
基本命令不熟悉的朋友可以先阅读我们之前的推文掌握八大Tikz 作图工具,Tikz 入门 So easy,记住8个基本命令就可以入门了。
1. 定义点
定义点的 Tikz
命令是\coordinate(<name>)(<coordinate>);
。例如 \coordinate (A) at (1,0);
相当于将坐标
(
1
,
0
)
(1,0)
(1,0)储存在字母
A
A
A 中,下面要引用这个坐标时,就可以用(A)
来引用这个点了。
tkz-uclide
宏包中定义了一个可以批量定义点的命令——\tkzDefPoints{}
,例如\tkzDefPoints{0/0/O,-2.25/-1.5/A,...}
, 就可以将
(
0
,
0
)
(0,0)
(0,0)和
(
−
2.25
,
−
1.5
)
(-2.25,-1.5)
(−2.25,−1.5)分别储存在字母 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}
【LaTeX微信交流加群:】
如果你希望交流LaTeX使用或者TikZ作图或者Beamer制作幻灯片方面的问题,请先添加作者微信:niltxz,然后加入作者的LaTeX+TikZ+Beamer 交流微信群。