summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-lines.tex
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-lines.tex')
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-lines.tex293
1 files changed, 293 insertions, 0 deletions
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-lines.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-lines.tex
new file mode 100644
index 0000000000..5d5e2934fe
--- /dev/null
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-lines.tex
@@ -0,0 +1,293 @@
+% tkz-obj-eu-lines.tex
+% Copyright 2023 Alain Matthes
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2005/12/01 or later.
+% This work has the LPPL maintenance status “maintained”.
+% The Current Maintainer of this work is Alain Matthes.
+
+\def\fileversion{5.00c}
+\def\filedate{2023/01/23}
+\typeout{2023/01/23 5.00c tkz-obj-eu-lines.tex}
+\makeatletter
+%<--------------------------------------------------------------------------–>
+% les lignes
+%<--------------------------------------------------------------------------–>
+\def\tkz@numline{0}
+\pgfkeys{/tkzdefline/.cd,
+ mediator/.code = \def\tkz@numline{0},
+ perpendicular/.code args = {through #1} {\def\tkz@numline{1}%
+ \def\tkz@through{#1}},
+ orthogonal/.code args = {through #1} {\def\tkz@numline{1}%
+ \def\tkz@through{#1}},
+ parallel/.code args = {through #1}{\def\tkz@numline{2}%
+ \def\tkz@through{#1}},
+ bisector/.code = \def\tkz@numline{3},
+ bisector out/.code = \def\tkz@numline{4},
+ symmedian/.code = \def\tkz@numline{5},
+ altitude/.code = \def\tkz@numline{6},
+ euler/.code = \def\tkz@numline{7},
+ tangent from/.code = \def\tkz@numline{8} \def\tkz@ptfrom{#1},
+ tangent at/.code = \def\tkz@numline{9} \def\tkz@ptat{#1},
+ K/.code = \def\tkz@koeff{#1},
+ K = 1,
+ normed/.is if = tkz@line@normed,
+ normed/.default = true,
+ normed = false,
+ mediator
+}
+\def\tkzDefLine{\pgfutil@ifnextchar[{\tkz@DefLine}{\tkz@DefLine[]}}
+\def\tkz@DefLine[#1](#2){%
+\begingroup
+%\pgfkeys{/tkzdefline/.cd,K=1}
+\pgfqkeys{/tkzdefline}{#1}
+\ifcase\tkz@numline%
+ % first case 0
+ \tkzDefMediatorLine(#2)
+ \or% 1
+ \tkzDefOrthLine[\tkz@koeff](#2)
+ \or% 2
+ \tkzDefLineLL(#2)
+ \or% 3
+ \tkzDefBisectorLine(#2)
+ \or% 4
+ \tkzDefBisectorOutLine(#2)
+ \or% 5
+ \tkzDefSymmedianLine(#2)
+ \or% 6
+ \tkzDefAltitudeLine(#2)
+ \or% 7
+ \tkzDefEulerLine(#2)
+ \or% 8
+ \tkzTgtFromP(#2)(\tkz@ptfrom)
+ \or% 9
+ \tkzTgtAt(#2)(\tkz@ptat)
+ \fi
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+% tkzLineLL revoir out !!
+%<--------------------------------------------------------------------------–>
+\def\tkzDefLineLL{\pgfutil@ifnextchar[{\tkz@DefLineLL}{%
+ \tkz@DefLineLL[1]}}
+\def\tkz@DefLineLL[#1](#2,#3){%
+\begingroup
+ \pgfpointdiff{\pgfpointanchor{#2}{center}}{\pgfpointanchor{#3}{center}}%
+ \pgf@xa=\pgf@x\relax%%
+ \pgf@ya=\pgf@y\relax%%
+ \pgfinterruptboundingbox
+ \path[coordinate](\tkz@through)--++(\tkz@koeff\pgf@xa,\tkz@koeff\pgf@ya)%
+ coordinate (tkzPointResult);
+ \endpgfinterruptboundingbox
+ \iftkz@line@normed
+ \tkzVecKNorm(\tkz@through,tkzPointResult)
+ \fi
+\endgroup}%
+%<--------------------------------------------------------------------------–>
+% tkzOrthLine
+%<--------------------------------------------------------------------------–>
+\def\tkzDefOrthLine{\pgfutil@ifnextchar[{\tkz@DefOrthLine}{%
+ \tkz@DefOrthLine[1]}}
+\def\tkz@DefOrthLine[#1](#2,#3){%
+\begingroup
+ \tkzDefPointWith(#2,#3)
+ \pgfnodealias{tkz@OLtmp}{tkzPointResult}
+ \tkz@VecKCoLinear[\tkz@koeff](#2,tkz@OLtmp,\tkz@through)
+ \iftkz@line@normed
+ \pgfinterruptboundingbox
+ \tkzVecKNorm(\tkz@through,tkzPointResult)
+ \endpgfinterruptboundingbox
+ \fi
+\endgroup}%
+%<--------------------------------------------------------------------------–>
+% tkzMediatorLine
+%<--------------------------------------------------------------------------–>
+\def\tkzDefMediatorLine{\pgfutil@ifnextchar[{\tkz@DefMediatorLine}{%
+ \tkz@DefMediatorLine[1]}}
+
+\def\tkz@DefMediatorLine[#1](#2,#3){% new 2020
+\begingroup
+ \tkzDefEquilateral(#2,#3)
+ \pgfnodealias{tkzFirstPointResult}{tkzPointResult}
+ \tkzDefEquilateral(#3,#2)
+ \pgfnodealias{tkzSecondPointResult}{tkzPointResult}
+ \ifx\tkz@koeff=1 %
+ \else
+ \tkzDefMidPoint(#2,#3)
+ \pgfnodealias{tkz@mid}{tkzPointResult}
+ \tkz@VecK[\tkz@koeff](tkz@mid,tkzFirstPointResult)
+ \pgfnodealias{tkzFirstPointResult}{tkzPointResult}
+ \tkz@VecK[\tkz@koeff](tkz@mid,tkzSecondPointResult)
+ \pgfnodealias{tkzSecondPointResult}{tkzPointResult}
+ \fi
+ \iftkz@line@normed
+ \tkzDefMidPoint(#2,#3)
+ \pgfnodealias{tkz@mid}{tkzPointResult}
+ % \pgfinterruptboundingbox
+ \tkzVecKNorm[\tkz@koeff](tkz@mid,tkzFirstPointResult)
+ \pgfnodealias{tkzFirstPointResult}{tkzPointResult}
+ \tkzVecKNorm[\tkz@koeff](tkz@mid,tkzSecondPointResult)
+ \pgfnodealias{tkzSecondPointResult}{tkzPointResult}
+ % \endpgfinterruptboundingbox
+ \fi
+\endgroup}
+% autre possibilité
+
+%<--------------------------------------------------------------------------–>
+% BisectorLine
+%<--------------------------------------------------------------------------–>
+\def\tkzDefBisectorLine(#1,#2,#3){%
+\begingroup
+ \pgfinterruptboundingbox
+ \tkzDuplicateSegment(#2,#1)(#2,#3)
+ \pgfnodealias{bi@tmp}{tkzPointResult}
+ \tkzDefMidPoint(bi@tmp,#1)
+% \tkzDefEquilateral(bi@tmp,#1)
+ \ifx\tkz@koeff=1 %
+ \else
+ \tkzVecK[\tkz@koeff](#2,tkzPointResult)
+ \fi
+ \iftkz@line@normed
+ \tkzVecKNorm[\tkz@koeff](#2,tkzPointResult)
+ \fi
+ \endpgfinterruptboundingbox
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+% Out BisectorLine
+%<--------------------------------------------------------------------------–>
+\def\tkzDefBisectorOutLine(#1,#2,#3){%
+\begingroup
+\pgfinterruptboundingbox
+ \tkzDuplicateLength(#2,#1)(#2,#3)
+ \pgfnodealias{out@tmp}{tkzPointResult}
+ \tkzDefMidPoint(#1,out@tmp)
+ \pgfnodealias{out@pt1}{tkzPointResult}
+ \tkzURotateAngle(#2,90)(out@pt1)
+ \ifx\tkz@koeff=1 %
+ \else
+ \tkzVecK[\tkz@koeff](#2,tkzPointResult)
+ \fi
+ \iftkz@line@normed
+ \tkzVecKNorm[\tkz@koeff](#2,tkzPointResult)
+ \fi
+\endpgfinterruptboundingbox
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+% Symmedian line
+%<--------------------------------------------------------------------------–>
+\def\tkzDefSymmedianLine(#1,#2,#3){%
+\begingroup
+ \tkzDefBisectorLine(#1,#2,#3)
+ \pgfnodealias{sym@pt1}{tkzPointResult}
+ \tkzDefMidPoint(#1,#3)
+ \pgfnodealias{sym@pt2}{tkzPointResult}
+ \tkzUSymOrth(#2,sym@pt1)(sym@pt2)
+ \ifx\tkz@koeff=1 %
+ \else
+ \tkzVecK[\tkz@koeff](#2,tkzPointResult)
+ \fi
+ \iftkz@line@normed
+ \tkzVecKNorm[\tkz@koeff](#2,tkzPointResult)
+ \fi
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+% Altitude Line
+%<--------------------------------------------------------------------------–>
+\def\tkzDefAltitudeLine(#1,#2,#3){%
+\begingroup
+ \pgfinterruptboundingbox
+ \tkzUProjection(#1,#3)(#2)
+ \pgfnodealias{ort@pta}{tkzPointResult}
+ \endpgfinterruptboundingbox
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+% Euler Line
+%<--------------------------------------------------------------------------–>
+\def\tkzDefEulerLine(#1,#2,#3){%
+\begingroup
+ \pgfinterruptboundingbox
+ \tkzOrthoCenter(#1,#2,#3)
+ \pgfnodealias{euler@pt1}{tkzPointResult}
+ \tkzEulerCenter(#1,#2,#3)
+ \pgfnodealias{euler@pt2}{tkzPointResult}
+ \pgfnodealias{tkzSecondPointResult}{euler@pt2}
+ \pgfnodealias{tkzFirstPointResult}{euler@pt1}
+ \endpgfinterruptboundingbox
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+% tangente à cercle passant par un point donné
+%<--------------------------------------------------------------------------–>
+
+\def\tkzTgtAt(#1)(#2){%
+\begingroup
+ \tkz@VecKOrthNorm[-1](#2,#1)
+ \endgroup
+}
+%<-------------------------------------------------------------------------–>
+\def\tkzTgtFromP(#1,#2)(#3){%
+\begingroup
+ \tkz@@CalcLengthcm(#1,#2){tkz@radone}
+ \tkzDefMidPoint(#1,#3)
+ \tkz@@CalcLengthcm(tkzPointResult,#1){tkz@radtwo}
+ \tkzInterCCR(#1,\tkz@radone)(tkzPointResult,\tkz@radtwo){%
+ tkzFirstPointResult}{tkzSecondPointResult}%
+ \tkzFindAngle(#3,tkzFirstPointResult,#1) \tkzGetAngle{tkz@an}
+ \ifdim\tkz@an pt<180 pt\relax%
+ \else
+ \pgfnodealias{tkzPointTmp}{tkzSecondPointResult}
+ \pgfnodealias{tkzSecondPointResult}{tkzFirstPointResult}
+ \pgfnodealias{tkzFirstPointResult}{tkzPointTmp}
+ \fi
+\endgroup
+}
+%<-------------------------------------------------------------------------–>
+\def\tkzTgtFromPR(#1,#2)(#3){%
+\begingroup
+ \tkzDefMidPoint(#1,#3)
+ \tkz@@CalcLengthcm(tkzPointResult,#1){tkzLengthResult}
+ \tkzInterCCR(#1,#2)(tkzPointResult,\tkzLengthResult){%
+ tkzFirstPointResult}{%
+ tkzSecondPointResult}%
+ \tkzFindAngle(#3,tkzFirstPointResult,#1) \tkzGetAngle{tkz@an}
+ \ifdim\tkz@an pt<180 pt\relax%
+ \else
+ \pgfnodealias{tkzPointTmp}{tkzSecondPointResult}
+ \pgfnodealias{tkzSecondPointResult}{tkzFirstPointResult}
+ \pgfnodealias{tkzFirstPointResult}{tkzPointTmp}
+ \fi
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+\def\tkz@numtang{0}
+\pgfkeys{/tkz@tang/.cd,
+ at/.code = {\def\tkz@numtang{0}\def\tkz@ptat{#1}},
+ from/.code = {\def\tkz@numtang{1}\def\tkz@ptfrom{#1}},
+ from with R/.code = {\def\tkz@numtang{2}\def\tkz@ptfrom{#1}}
+ }
+%<--------------------------------------------------------------------------–>
+\def\tkzDefTangent{\pgfutil@ifnextchar[{\tkz@Tangent}{\tkz@Tangent[]}}
+
+\def\tkz@Tangent[#1](#2){%
+\begingroup
+\pgfkeys{tkz@tang/.cd}
+\pgfqkeys{/tkz@tang}{#1}
+\ifcase\tkz@numtang
+ \tkzTgtAt(#2)(\tkz@ptat)
+\or
+ \tkzTgtFromP(#2)(\tkz@ptfrom)
+ \or
+ \tkzTgtFromPR(#2)(\tkz@ptfrom)
+\fi
+\endgroup
+}
+\makeatother
+\endinput \ No newline at end of file