[LaTeX 繪圖] tikz 繪製平面幾何,示例兩則
本文已加入專欄文章目錄,歸入「示例」文章系列。
整體建議:
0。 通讀 tikz 文件
Part I。 Tutorials and Guidelines
中的教程
座標
儘可能少用具體座標,例如
(0, 1)
多用間接座標,如使用 coordinate/node name 和座標運算
同類操作(標點、繪線)集中做
避免重複,例如透過定義 tikz style 來避免重複輸入鍵值選項
在可讀性和輸入簡短之間取平衡(沒有唯一準則,適合自己就好)
可重複利用的 tikz style 配置
\tikzset
{
dot/。style=
{
circle, fill=black, inner sep=1pt, outer sep=0pt
}
,
dot label/。style=
{
circle, inner sep=0pt, outer sep=1pt
}
,
% style for every pics named “right angle”
pics/right angle/。append style=
{
/tikz/draw, /tikz/angle radius=5pt
}
}
解釋說明:
定義新 style key
dot
,設定「點」的樣式為半徑為 1pt 的實心圓點。這個 style 會應用於 node。
定義新 style key
dot label
,設定「點」的文字標籤樣式。這個 style 會應用於 node label。
因為只有影響所有 pic 的
every pic
style key、沒有隻影響某一類 pic 的
every xxx pic
style key,我們透過 style key
pics/right angle
設定所有直角標記的樣式。選項作用,詳見本專欄文章《[LaTeX 繪圖] tikz v3。1 新功能,標記直角》。
例 1:座標運算、直角標記和點的繪製
% \usepackage{tikz}
% \usetikzlibrary{angles, calc}
\begin
{
tikzpicture
}
% denote absolute points
\path
coordinate (A) at (0, 0)
coordinate (B) at (60:5)
coordinate (C) at (5, 0);
% denote relative points
\path
coordinate (M) at (
$
(
A
)!
。
5
!(
B
)
$
)
coordinate (N) at (
$
(
B
)!
。
5
!(
C
)
$
)
coordinate (Q) at (
$
(
C
)!
。
3
!(
A
)
$
)
coordinate (P) at (
$
(
C
)!
。
8
!(
A
)
$
)
coordinate (K) at (
$
(
M
)!(
P
)!(
Q
)
$
)
coordinate (L) at (
$
(
M
)!(
N
)!(
Q
)
$
);
% draw lines
\draw
[line width=。5pt]
(A) —— (B) —— (C) —— cycle
(M) —— (Q)
(P) —— (K)
(N) —— (L);
% mark right angles
\draw
pic
{
right angle=P——K——Q
}
pic
{
right angle=N——L——Q
}
;
% mark points
\foreach
\i
/
\angle
in
{
A/-120, B/120, C/-80, M/120, N/60, P/-90, Q/-90, K/80, L/-95
}
{
\node
[dot, label={[dot label]
\angle
:
$
\i
$
}
] at (
\i
)
{}
;
}
\end
{
tikzpicture
}
解釋說明:
這個例子中,只使用了三個具體座標,用於標記點 A,B 和 C。
其他的點,都透過座標運算得到。這部分依賴 tikz library
calc
。本例中涉及兩類這樣的點
線上段所在直線上,取的定比例點。
例如「線上段 AC 上,且滿足 CP = 0。8CA 」的 P 點,對應座標
($ (C)!。8!(A) $)
過定點作定直線的垂線,垂線在直線上的垂足。
例如「線外一點 P 在直線 MQ 上的垂足」 K 點,對應座標
($ (M)!(P)!(Q) $)
先集中標記點。
標記點的標準做法是
\coordinate
命令,每次可以標記一個點。這意味著,如果要標記 10 個點,就要輸入 10 次
\coordinate
命令。
為了少輸入反斜槓符號,換用
\path
(並非推薦和必要)
然後畫連線點的線。注意
\draw
支援一次畫多段線(multiple subpaths)。
接著標記直角(依賴 tikz library
angles
,由
pics/right angle
控制樣式)
最後,標記點(樣式由
dot
控制),並在點的附近加上標籤(例如
$A$
,樣式由
every label
控制)。
為了逐一控制標籤相對於點的位置關係,我們用了迴圈。
例 2,弧線和顏色填充
% \usepackage{tikz}
% \usetikzlibrary{backgrounds, calc}
\begin
{
tikzpicture
}
[scale=2]
% denote absolute points
\path
(0, 0) coordinate (D)
(2, 1) coordinate (B);
% denote relative points
\path
(D -| B) coordinate (C)
(D |- B) coordinate (A);
% mark points
\foreach
\i
/
\angle
in
{
A/135, B/45, C/-45, D/-135
}
{
\node
[dot, label={[dot label]
\angle
:
$
\i
$
}
] at (
\i
)
{}
;
}
% draw lines and arc
\draw
(D) rectangle (B)
(D) —— (B)
(C) arc[start angle=0, end angle=180, radius=1];
% fill region
\begin
{
scope
}
[on background layer]
\fill
[fill=blue!50, line join=bevel]
(D) —— (B) —— (
$
(
B
)!
。
5
!(
A
)
$
) arc[start angle=90, end angle=180, radius=1] —— cycle;
\end
{
scope
}
\end
{
tikzpicture
}
解釋說明:
這個例子中,只使用了兩個具體座標,用於標記點 D 和 B。
標記點時,
用了一種新的 coordinate 語法
用了一種新的相對座標語法:
(D -| B)
標記了「透過點 D 的水平線,和透過點 B 的鉛垂線,兩線的交點」,對應圖中的點 C。
(類似地,座標
(D |- B)
對應圖中的點 A)
顏色填充時,使用 tikz library
backgrounds
提供的
on background layer
選項,以避免填色覆蓋繪線。也可以先填色再繪線。
示例原始碼
見專案 muzimuzhi/latex-examples 中的檔案
tikz-example-planimetry。*