TikZで垂線を引く方法

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度回転させた先でたどり着く座標を返す。

おしまい。

コメントを残す

メールアドレスが公開されることはありません。