TikZで接線を引く方法

TikZで接線を引く方法を書く。

1. タイプセット環境

macOS Sierra,texlive2016,lualatex

2. コードと実行結果
コード
%
% preamble for lualatex
%
\RequirePackage{luatex85}
\documentclass[border={15pt}]{standalone}
\usepackage{luatexja}
\usepackage{tikz}
\usetikzlibrary{math, calc}
\begin{document}

%
%  接線を引く
%
\begin{tikzpicture}
  \path[draw] (0,0) plot[domain={0:2*pi}] ({\x}, {sin(\x r)});
    \tikzmath{
      coordinate \c;
      coordinate \vec;
      \c1 = ({3/4*pi}, {sin(3/4*pi r)});
      \c2 = ({(3/4 + 0.1)*pi}, {sin((3/4 + 0.1)*pi r)});
      \vec1 = (\c2) - (\c1);
    }
    \path[draw] ($(\c1) - 5*(\vec1)$) -- ($(\c1) + 5*(\vec1)$);
\end{tikzpicture}

%
%  包絡線の表現
%
\begin{tikzpicture}
  \foreach \t in {1,...,50}
    {
    \tikzmath{
      coordinate \c;
      coordinate \vec;
      real \r;
      \r1 = \t * 0.05;
      \c1 = ({\r1*pi}, {sin(\r1*pi r)});
      \c2 = ({(\r1 + 0.1)*pi}, {sin((\r1 + 0.1)*pi r)});
      \vec1 = (\c2) - (\c1);
    }
  \path[draw] ($(\c1) - 5*(\vec1)$) -- ($(\c1) + 5*(\vec1)$);
  };
\end{tikzpicture}
\end{document}
実行結果
3. 説明
3.1. preambleの説明
%
% preamble for lualatex
%
\RequirePackage{luatex85}
\documentclass[border={15pt}]{standalone}
\usepackage{luatexja}
\usepackage{tikz}
\usetikzlibrary{math, calc}

追加したtikzlibrary

math
 \tikzmathを使うため。
calc
 座標を用いた計算をするため。
3.2. documentの説明
%
%  接線を引く
%
\begin{tikzpicture}
  \path[draw] (0,0) plot[domain={0:2*pi}] ({\x}, {sin(\x r)});
    \tikzmath{
      coordinate \c;
      coordinate \vec;
      \c1 = ({3/4*pi}, {sin(3/4*pi r)});
      \c2 = ({(3/4 + 0.1)*pi}, {sin((3/4 + 0.1)*pi r)});
      \vec1 = (\c2) - (\c1);
    }
    \path[draw] ($(\c1) - 5*(\vec1)$) -- ($(\c1) + 5*(\vec1)$);
\end{tikzpicture}

以下のように\vec1を作り,\c1の前後に伸ばしている。

%
%  包絡線の表現
%
\begin{tikzpicture}
  \foreach \t in {1,...,50}
    {
    \tikzmath{
      coordinate \c;
      coordinate \vec;
      real \r;
      \r1 = \t * 0.05;
      \c1 = ({\r1*pi}, {sin(\r1*pi r)});
      \c2 = ({(\r1 + 0.1)*pi}, {sin((\r1 + 0.1)*pi r)});
      \vec1 = (\c2) - (\c1);
    }
  \path[draw] ($(\c1) - 5*(\vec1)$) -- ($(\c1) + 5*(\vec1)$);
  };
\end{tikzpicture}

\foreachで50本の接線を描いた。

おしまい。

コメントを残す

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

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください