TeXpicture · Docs

picture環境(pict2e, \usepackage{pict2e})

Tips

Draw

TeX Source (Main/Sub)

座標入力

図形の点に対するマウス編集

Controls

表示操作(パン・ズーム)

Export

交点用の LaTeX マクロ

\ExplSyntaxOn

\cs_new_protected:Npn \crossing
  {
    \peek_meaning:NTF [
      { \crossing_with_option:w }
      { \crossing_with_option:w [6] }
  }

\cs_new_protected:Npn \crossing_with_option:w [#1](#2,#3)(#4,#5)(#6,#7)(#8,#9)
  {
    \fp_set:Nn \l_tmpa_fp { #2 } % x1
    \fp_set:Nn \l_tmpb_fp { #3 } % y1
    \fp_set:Nn \l_tmpc_fp { #4 } % x2
    \fp_set:Nn \l_tmpd_fp { #5 } % y2
    \fp_set:Nn \l_tmpe_fp { #6 } % x3
    \fp_set:Nn \l_tmpf_fp { #7 } % y3
    \fp_set:Nn \l_tmpg_fp { #8 } % x4
    \fp_set:Nn \l_tmph_fp { #9 } % y4
    \fp_set:Nn \l_tmpi_fp { #1 } % d

    % over, under の方向ベクトル
    \fp_set:Nn \l_tmpj_fp { \l_tmpc_fp - \l_tmpa_fp }
    \fp_set:Nn \l_tmpk_fp { \l_tmpd_fp - \l_tmpb_fp }
    \fp_set:Nn \l_tmpl_fp { \l_tmpg_fp - \l_tmpe_fp }
    \fp_set:Nn \l_tmpm_fp { \l_tmph_fp - \l_tmpf_fp }

    % 平行判定用の外積
    \fp_set:Nn \l_tmpn_fp
      { \l_tmpj_fp * \l_tmpm_fp - \l_tmpk_fp * \l_tmpl_fp }

    % 平行またはほぼ平行なら何も出力しない
    \fp_compare:nF { abs(\l_tmpn_fp) < 1e-12 }
      {
        % 交点パラメータ t
        \fp_set:Nn \l_tmpo_fp
          {
            ((\l_tmpe_fp - \l_tmpa_fp) * \l_tmpm_fp - (\l_tmpf_fp - \l_tmpb_fp) * \l_tmpl_fp)
            / \l_tmpn_fp
          }

        % 交点
        \fp_set:Nn \l_tmpp_fp { \l_tmpa_fp + \l_tmpo_fp * \l_tmpj_fp }
        \fp_set:Nn \l_tmpq_fp { \l_tmpb_fp + \l_tmpo_fp * \l_tmpk_fp }

        % under strand の単位方向ベクトル
        \fp_set:Nn \l_tmpr_fp { sqrt((\l_tmpl_fp)^2 + (\l_tmpm_fp)^2) }
        \fp_set:Nn \l_tmps_fp { \l_tmpl_fp / \l_tmpr_fp }
        \fp_set:Nn \l_tmpt_fp { \l_tmpm_fp / \l_tmpr_fp }

        % under strand の切れ目両端
        \fp_set:Nn \l_tmpu_fp { \l_tmpp_fp - (#1 / 2) * \l_tmps_fp }
        \fp_set:Nn \l_tmpv_fp { \l_tmpq_fp - (#1 / 2) * \l_tmpt_fp }
        \fp_set:Nn \l_tmpw_fp { \l_tmpp_fp + (#1 / 2) * \l_tmps_fp }
        \fp_set:Nn \l_tmpx_fp { \l_tmpq_fp + (#1 / 2) * \l_tmpt_fp }

        \Line(#2,#3)(#4,#5)
        \Line(#6,#7)(\fp_to_decimal:N \l_tmpu_fp,\fp_to_decimal:N \l_tmpv_fp)
        \Line(\fp_to_decimal:N \l_tmpw_fp,\fp_to_decimal:N \l_tmpx_fp)(#8,#9)
      }
  }

\ExplSyntaxOff