summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/tkz-euclide/tkz-obj-eu-points-by.tex
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2020-01-24 21:43:02 +0000
committerKarl Berry <karl@freefriends.org>2020-01-24 21:43:02 +0000
commit4ce6f5f9c360b21c85e05cf51a20445a33aba4cc (patch)
tree7568e73fee89da48bc1ac9a383219336a4f23160 /Master/texmf-dist/tex/latex/tkz-euclide/tkz-obj-eu-points-by.tex
parentd5adeaeb325c83b945dd89cac45b12a7410fd32d (diff)
tkz-euclide (24jan20)
git-svn-id: svn://tug.org/texlive/trunk@53531 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/tkz-euclide/tkz-obj-eu-points-by.tex')
-rw-r--r--Master/texmf-dist/tex/latex/tkz-euclide/tkz-obj-eu-points-by.tex402
1 files changed, 402 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex/tkz-euclide/tkz-obj-eu-points-by.tex b/Master/texmf-dist/tex/latex/tkz-euclide/tkz-obj-eu-points-by.tex
new file mode 100644
index 00000000000..bf8793ad093
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/tkz-euclide/tkz-obj-eu-points-by.tex
@@ -0,0 +1,402 @@
+% tkz-tools-eu-points-by.tex
+% Copyright 2011 by Alain Matthes
+% This file may be distributed and/or modified
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+\def\fileversion{3.01c}
+\def\filedate{2020/01/23}
+\typeout{2020/01/23 3.01c tkz-tools-eu-points-by.tex}
+\makeatletter
+%<--------------------------------------------------------------------------–>
+% Transformations Géométriques
+%<--------------------------------------------------------------------------–>
+\def\tkz@numtrsf{0}
+\pgfkeys{/tkzDefPointBy/.cd,
+translation/.code args={from #1 to #2}{%
+ \def\tkzfrom{#1}%
+ \def\tkzto{#2}%
+ \def\tkz@numtrsf{0}},
+ homothety/.code args={center #1 ratio #2}{%
+ \def\tkzcenter{#1}%
+ \def\tkzratio{#2}%
+ \def\tkz@numtrsf{1}},
+ reflection/.code args={over #1--#2}{%
+ \def\tkzdeb{#1}%
+ \def\tkzfin{#2}%
+ \def\tkz@numtrsf{2}},
+ symmetry/.code args={center #1}{%
+ \def\tkzcenter{#1}%
+ \def\tkz@numtrsf{3}},
+ projection/.code args={onto #1--#2}{%
+ \def\tkzdeb{#1}%
+ \def\tkzfin{#2}%
+ \def\tkz@numtrsf{4}},
+ rotation/.code args={center #1 angle #2}{%
+ \def\tkzcenter{#1}%
+ \def\tkzangle{#2}%
+ \def\tkz@numtrsf{5}},
+ rotation in rad/.code args={center #1 angle #2}{%
+ \def\tkzcenter{#1}%
+ \def\tkzangle{#2}%
+ \def\tkz@numtrsf{6}},
+inversion/.code args={center #1 through #2}{%
+ \def\tkzcenter{#1}%
+ \def\tkzpoint{#2}%
+ \def\tkz@numtrsf{7}}
+}
+%<--------------------------------------------------------------------------–>
+\def\tkzDefPointBy{\pgfutil@ifnextchar[{\tkz@DefPointBy}{\tkz@DefPointBy[]}}
+\def\tkz@DefPointBy[#1](#2){%
+\begingroup
+\pgfqkeys{/tkzDefPointBy}{#1}
+ \ifcase\tkz@numtrsf%
+% % first case 0
+ \tkzUTranslation(\tkzfrom,\tkzto)(#2)
+\or% 1
+ \tkzUHomo(\tkzcenter,\tkzratio)(#2)
+\or% 2
+ \tkzUSymOrth(\tkzdeb,\tkzfin)(#2)
+\or% 3
+ \tkzUCSym(\tkzcenter)(#2)
+\or% 4
+ \tkzUProjection(\tkzdeb,\tkzfin)(#2)
+\or% 5
+ \tkzURotateAngle(\tkzcenter,\tkzangle)(#2)
+\or% 6
+ \tkzURotateInRad(\tkzcenter,\tkzangle)(#2)
+\or% 7
+ \tkzUInversePoint(\tkzcenter,\tkzpoint)(#2)
+\fi
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+\def\tkzDefPointsBy{\pgfutil@ifnextchar[{\tkz@DefPointsBy}{\tkz@DefPointsBy[]}}
+\def\tkz@DefPointsBy[#1](#2)#3{%
+\begingroup
+\pgfqkeys{/tkzDefPointBy}{#1}
+\ifcase\tkz@numtrsf%
+ % first case 0
+ \tkzTranslation(\tkzfrom,\tkzto)(#2){#3}
+ \or% 1
+ \tkzHomo(\tkzcenter,\tkzratio)(#2){#3}
+ \or% 2
+ \tkzSymOrth(\tkzdeb,\tkzfin)(#2){#3}
+ \or% 3
+ \tkzCSym(\tkzcenter)(#2){#3}
+ \or% 4
+ \tkzProjection(\tkzdeb,\tkzfin)(#2){#3}
+ \or% 5
+ \tkzRotateAngle(\tkzcenter,\tkzangle)(#2){#3}
+ \or% 6
+ \tkzRotateInRad(\tkzcenter,\tkzangle)(#2){#3}
+ \or% 7
+ \tkzInversePoint(\tkzcenter,\tkzpoint)(#2){#3}
+\fi
+\endgroup
+}
+
+%<--------------------------------------------------------------------------–>
+
+\def\ExtractPoint#1,#2\@nil{%
+\xdef\tkz@LastList{#2}
+\xdef\tkz@FirstPoint{#1}
+}
+\def\FirstPointInList#1{%
+\edef\tkz@templist{#1,}
+\expandafter\ExtractPoint\tkz@templist\@nil
+}
+%<--------------------------------------------------------------------------–>
+% Translation par rapport à un point
+%<--------------------------------------------------------------------------–>
+\def\tkzTranslation(#1,#2)(#3)#4{%
+\begingroup
+\gdef\tkz@LastList{#4}
+\foreach\PT in {#3}{%
+ \FirstPointInList\tkz@LastList
+ \ifx\tkz@FirstPoint\tkzutil@empty
+ \def\tkz@pointtsf{\PT '}
+ \else
+ \def\tkz@pointtsf{\tkz@FirstPoint}
+ \fi
+ \tkz@VecCoLinear(#1,#2,\PT)
+ \pgfnodealias{\tkz@pointtsf}{tkzPointResult}
+ }
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+\def\tkzUTranslation(#1,#2)(#3){%
+\begingroup
+ \tkz@VecCoLinear(#1,#2,#3)%
+\endgroup
+}
+
+%<--------------------------------------------------------------------------–>
+% Symétrie par rapport à un point Homo with (-1)
+% #2 le centre #3 l'antécédent
+%<--------------------------------------------------------------------------–>
+\def\tkzCSym(#1)(#2)#3{%
+\begingroup
+\gdef\tkz@LastList{#3}
+ \foreach\PointCS in {#2}{%
+ \FirstPointInList\tkz@LastList
+ \ifx\tkz@FirstPoint\tkzutil@empty
+ \xdef\tkz@pointtsf{\PointCS '}
+ \else
+ \xdef\tkz@pointtsf{\tkz@FirstPoint}
+ \fi
+ \pgfpointdiff{\pgfpointanchor{#1}{center}}%
+ {\pgfpointanchor{\PointCS}{center}}%
+ \tkz@ax=\pgf@x%
+ \tkz@ay=\pgf@y%
+ \path(#1)--++(-\tkz@ax,-\tkz@ay)coordinate (\tkz@pointtsf);
+}
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+\def\tkzUCSym(#1)(#2){%
+\begingroup
+ \pgfpointdiff{\pgfpointanchor{#1}{center}}%
+ {\pgfpointanchor{#2}{center}}%
+ \tkz@ax=\pgf@x%
+ \tkz@ay=\pgf@y%
+ \path(#1)--++(-\tkz@ax,-\tkz@ay)coordinate (tkzPointResult);
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+% Symétrie orthogonale par rapport à une droite
+%<--------------------------------------------------------------------------–>
+\def\tkzSymOrth(#1,#2)(#3)#4{%
+\begingroup
+\gdef\tkz@LastList{#4}
+ \foreach\PointSO in {#3}{%
+ \FirstPointInList\tkz@LastList
+ \ifx\tkz@FirstPoint\tkzutil@empty
+ \def\tkz@pointtsf{\PointSO '}
+ \else
+ \def\tkz@pointtsf{\tkz@FirstPoint}
+ \fi
+ \tkzUSymOrth(#1,#2)(\PointSO)
+ \pgfnodealias{\tkz@pointtsf}{tkzPointResult}
+ }
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+\def\tkzUSymOrth(#1,#2)(#3){%
+\begingroup
+ \pgfpointdiff{\pgfpointanchor{#1}{center}}%
+ {\pgfpointanchor{#2}{center}}%
+ \tkz@ax =\pgf@y%
+ \tkz@ay =\pgf@x%
+ \path[coordinate]%
+ (#3)--++(-\tkz@ax,\tkz@ay) coordinate (tkz@point);
+ \tkzInterLL(#1,#2)(#3,tkz@point)
+ \pgfnodealias{tkzPointofSym}{tkzPointResult}
+ \tkz@VecK[2](#3,tkzPointofSym)
+\endgroup
+}
+
+%<--------------------------------------------------------------------------–>
+% Projection orthogonale sur une droite
+%<--------------------------------------------------------------------------–>
+\def\tkzProjection(#1,#2)(#3)#4{%
+\begingroup
+\gdef\tkz@LastList{#4}
+ \foreach\PointPJ in {#3}{%
+ \FirstPointInList\tkz@LastList
+ \ifx\tkz@FirstPoint\tkzutil@empty
+ \def\tkz@pointtsf{\PointPJ '}
+ \else
+ \def\tkz@pointtsf{\tkz@FirstPoint}
+ \fi
+ \tkzUProjection(#1,#2)(\PointPJ)
+ \pgfnodealias{\tkz@pointtsf}{tkzPointResult}
+ }
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+\def\tkzUProjection(#1,#2)(#3){%
+\begingroup
+ \pgfpointdiff{\pgfpointanchor{#1}{center}}%
+ {\pgfpointanchor{#2}{center}}%
+ \tkz@ax =\pgf@y%
+ \tkz@ay =\pgf@x%
+ \pgfinterruptboundingbox
+ \path[coordinate](#3)--++(-\tkz@ax,\tkz@ay) coordinate (tkz@point);
+ \tkzInterLL(#1,#2)(#3,tkz@point)% définit tkzPointResult
+ \endpgfinterruptboundingbox
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+\def\tkz@Projection(#1,#2)(#3)#4{%
+\begingroup
+ \pgfpointdiff{\pgfpointanchor{#1}{center}}%
+ {\pgfpointanchor{#2}{center}}%
+ \tkz@ax =\pgf@y%
+ \tkz@ay =\pgf@x%
+ \pgfinterruptboundingbox
+ \path[coordinate](#3)--++(-\tkz@ax,\tkz@ay) coordinate (tkz@point);
+ \endpgfinterruptboundingbox
+ \tkz@InterLL(#1,#2)(#3,tkz@point){#4}% définit tkzPointResult
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+% Homothétie par rapport à un point
+%<--------------------------------------------------------------------------–>
+\def\tkzHomo(#1,#2)(#3)#4{%
+\begingroup
+\gdef\tkz@LastList{#4}
+ \foreach\PointHO in {#3}{%
+ \FirstPointInList\tkz@LastList
+ \ifx\tkz@FirstPoint\tkzutil@empty
+ \xdef\tkz@pointtsf{\PointHO '}
+ \else
+ \xdef\tkz@pointtsf{\tkz@FirstPoint}
+ \fi
+ \pgfpointdiff{\pgfpointanchor{#1}{center}}%
+ {\pgfpointanchor{\PointHO}{center}}%
+ \pgf@xa=\pgf@x%
+ \pgf@ya=\pgf@y%
+ \pgfmathparse{#2}\edef\tkz@coeff{\pgfmathresult}%
+ \path[coordinate](#1)--++(\tkz@coeff\pgf@xa,\tkz@coeff\pgf@ya)%
+ coordinate(\tkz@pointtsf);
+ }
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+\def\tkzUHomo(#1,#2)(#3){%
+\begingroup
+ \pgfpointdiff{\pgfpointanchor{#1}{center}}%
+ {\pgfpointanchor{#3}{center}}%
+ \pgf@xa=\pgf@x%
+ \pgf@ya=\pgf@y%
+ \pgfmathparse{#2}\edef\tkz@coeff{\pgfmathresult}%
+ \path[coordinate](#1)--++(\tkz@coeff\pgf@xa,\tkz@coeff\pgf@ya)%
+ coordinate(tkzPointResult);
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+% rotation en degré
+%<--------------------------------------------------------------------------–>
+\def\tkzRotateAngle(#1,#2)(#3)#4{%
+\begingroup
+\gdef\tkz@LastList{#4}
+ \foreach\PointRot in {#3}{%
+ \FirstPointInList\tkz@LastList
+ \ifx\tkz@FirstPoint\tkzutil@empty
+ \def\tkz@pointtsf{\PointRot '}
+ \else
+ \def\tkz@pointtsf{\tkz@FirstPoint}
+ \fi
+ \tkz@@extractxy{\PointRot}
+ \tkz@ax\pgf@x%
+ \tkz@ay\pgf@y%
+ \tkz@@extractxy{#1}
+ \tkz@bx\pgf@x%
+ \tkz@by\pgf@y%
+ \pgfmathrotatepointaround{\pgfpoint{\tkz@ax}{\tkz@ay}}%
+ {\pgfpoint{\tkz@bx}{\tkz@by}}%
+ {#2}
+ \tkz@bx\pgf@x%
+ \tkz@by\pgf@y%
+ \path[coordinate](\tkz@bx,\tkz@by)coordinate(\tkz@pointtsf);%
+ }
+ \endgroup
+}
+%<--------------------------------------------------------------------------–>
+\def\tkzURotateAngle(#1,#2)(#3){%
+\begingroup
+ \pgf@process{\pgfpointanchor{#3}{center}}%
+ \tkz@ax\pgf@x%
+ \tkz@ay\pgf@y%
+ \pgf@process{\pgfpointanchor{#1}{center}}%
+ \tkz@bx\pgf@x%
+ \tkz@by\pgf@y%
+ \pgfmathrotatepointaround{\pgfpoint{\tkz@ax}{\tkz@ay}}%
+ {\pgfpoint{\tkz@bx}{\tkz@by}}%
+ {#2}
+ \tkz@bx\pgf@x%
+ \tkz@by\pgf@y%
+ \path (\tkz@bx,\tkz@by) coordinate (tkzPointResult);%
+ \endgroup
+}
+%<--------------------------------------------------------------------------–>
+% % rotation en radian
+% %<--------------------------------------------------------------------------–>
+\def\tkzRotateInRad(#1,#2)(#3)#4{%
+\begingroup
+\gdef\tkz@LastList{#4}
+ \foreach\PointRot in {#3}{%
+ \FirstPointInList\tkz@LastList
+ \ifx\tkz@FirstPoint\tkzutil@empty
+ \xdef\tkz@pointtsf{\PointRot '}
+ \else
+ \xdef\tkz@pointtsf{\tkz@FirstPoint}
+ \fi
+ \pgfmathparse{#2 r}
+ \let\tkz@Angle\pgfmathresult
+ \tkz@@extractxy{\PointRot}
+ \tkz@ax\pgf@x%
+ \tkz@ay\pgf@y%
+ \tkz@@extractxy{#1}
+ \tkz@bx\pgf@x%
+ \tkz@by\pgf@y%
+ \pgfmathrotatepointaround{\pgfpoint{\tkz@ax}{\tkz@ay}}%
+ {\pgfpoint{\tkz@bx}{\tkz@by}}%
+ {\tkz@Angle}
+ \tkz@bx\pgf@x%
+ \tkz@by\pgf@y%
+ \path[coordinate](\tkz@bx,\tkz@by)coordinate(\tkz@pointtsf);
+}
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+\def\tkzURotateInRad(#1,#2)(#3){%
+\begingroup
+ \pgfmathparse{#2 r}
+ \let\tkz@Angle\pgfmathresult
+ \tkz@@extractxy{#3}
+ \tkz@ax\pgf@x%
+ \tkz@ay\pgf@y%
+ \tkz@@extractxy{#1}
+ \tkz@bx\pgf@x%
+ \tkz@by\pgf@y%
+ \pgfmathrotatepointaround{\pgfpoint{\tkz@ax}{\tkz@ay}}%
+ {\pgfpoint{\tkz@bx}{\tkz@by}}%
+ {\tkz@Angle}
+ \tkz@bx\pgf@x%
+ \tkz@by\pgf@y%
+ \path[coordinate](\tkz@bx,\tkz@by)coordinate(tkzPointResult);
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+% Inverse of a point
+%<--------------------------------------------------------------------------–>
+\def\tkzInversePoint(#1,#2)(#3)#4{%
+\begingroup
+\gdef\tkz@LastList{#4}
+ \foreach\PointIP in {#3}{%
+ \FirstPointInList\tkz@LastList
+ \ifx\tkz@FirstPoint\tkzutil@empty
+ \xdef\tkz@pointtsf{\PointIP '}
+ \else
+ \xdef\tkz@pointtsf{\tkz@FirstPoint}
+ \fi
+ \tkzCalcLength[cm](#1,\PointIP)\tkzGetLength{tkz@lnb}%
+ \edef\tkz@lnc{\fpeval{1/\tkz@lnb}}
+ \tkzVecKNorm[\tkz@lnb](#1,\PointIP)
+ }
+\endgroup
+}
+\def\tkzUInversePoint(#1,#2)(#3){%
+\begingroup
+ \tkzCalcLength[cm](#1,#3)\tkzGetLength{tkz@lnb}%
+ \edef\tkz@lnc{\fpeval{1/\tkz@lnb}}
+ \tkzVecKNorm[\tkz@lnc](#1,#3)
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+% Fin des transformations
+%<--------------------------------------------------------------------------–>
+
+ \makeatother
+\endinput \ No newline at end of file