TikZで垂線を引く方法を書く。
1. タイプセット環境
macOS Sierra,texlive2016,lualatex
2. コードと実行結果
- コード
-
% % preamble for lualatex % \RequirePackage{luatex85} \documentclass{standalone} \usepackage{luatexja} \usepackage{tikz} \usetikzlibrary{calc} \begin{document} % % AB上に点Cから垂線を下ろす % \begin{tikzpicture}[ point/.style={circle, fill=cyan!50} ] \path node[label=A, point] (A) at (0, 0) {}; \path node[label=B, point] (B) at (2, 2) {}; \path node[label=C, point] (C) at (0, 2) {}; % % ($(A)!(C)!(B)$)は点Cの直線AB上への射影 % \path node[label=D, point, color=red] (D) at ($(A)!(C)!(B)$){}; \path[draw] (A) -- (D) -- (B); \path[draw] (C) -- (D); \end{tikzpicture} % % calcを使ったpathの変形 % \begin{tikzpicture}[ point/.style={circle, fill=magenta!50} ] \path node[label=E, point] (E) at (0, 0) {}; \path node[label=F, point] (F) at (2, 2) {}; % % 直線EF上の点を指定 % \path node[label=G, point, color=yellow] (G) at ($(E)!.5!(F)$){}; % % EからGまで線を引いて,GからFまでの線を90°折り曲げる % \path[draw] (E) -- (G) -- ($(G)!1!90:(F)$) node[label=H, point]{}; \path[draw] (G) -- (F); \end{tikzpicture} \end{document}
- 実行結果
3. 説明
- 3.1. preambleの説明
-
% % preamble for lualatex % \RequirePackage{luatex85} \documentclass{standalone} \usepackage{luatexja} \usepackage{tikz} \usetikzlibrary{calc}
追加したtikzlibrary
- calc
- 座標を用いた計算をするため。
- 3.2. documentの説明
-
% % AB上に点Cから垂線を下ろす % \begin{tikzpicture}[ point/.style={circle, fill=cyan!50} ] \path node[label=A, point] (A) at (0, 0) {}; \path node[label=B, point] (B) at (2, 2) {}; \path node[label=C, point] (C) at (0, 2) {}; % % ($(A)!(C)!(B)$)は点Cの直線AB上への射影 % \path node[label=D, point, color=red] (D) at ($(A)!(C)!(B)$){}; \path[draw] (A) -- (D) -- (B); \path[draw] (C) -- (D); \end{tikzpicture}
($(A)!(C)!(B)$)で,点Cから点ABに下ろした垂線の足にあたる点の座標を返す。calcライブラリーを使わないと座標の計算ができないので注意。
% % calcを使ったpathの変形 % \begin{tikzpicture}[ point/.style={circle, fill=magenta!50} ] \path node[label=E, point] (E) at (0, 0) {}; \path node[label=F, point] (F) at (2, 2) {}; % % 直線EF上の点を指定 % \path node[label=G, point, color=yellow] (G) at ($(E)!.5!(F)$){}; % % EからGまで線を引いて,GからFまでの線を90°折り曲げる % \path[draw] (E) -- (G) -- ($(G)!1!90:(F)$) node[label=H, point]{}; \path[draw] (G) -- (F); \end{tikzpicture}
($(E)!.5!(F)$)は,線分EFの中点の座標を返す。($(E)!.1!(F)$)とすれば,直線EFを1:9に内分する点の座標を返す。($(G)!1!90:(F)$)は,線分GFを作るパスを90度回転させた先でたどり着く座標を返す。
おしまい。