diff options
Diffstat (limited to 'Master/texmf-dist/tex/latex/tkz-euclide/tkz-tools-transformations.tex')
-rw-r--r-- | Master/texmf-dist/tex/latex/tkz-euclide/tkz-tools-transformations.tex | 525 |
1 files changed, 525 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex/tkz-euclide/tkz-tools-transformations.tex b/Master/texmf-dist/tex/latex/tkz-euclide/tkz-tools-transformations.tex new file mode 100644 index 00000000000..fd7b14f112c --- /dev/null +++ b/Master/texmf-dist/tex/latex/tkz-euclide/tkz-tools-transformations.tex @@ -0,0 +1,525 @@ +% 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{1.16 c} +\def\filedate{2011/06/01} + + +%<--------------------------------------------------------------------------–> +% Transformations Géométriques +%<--------------------------------------------------------------------------–> +\def\tkz@numtrsf{0} +\pgfkeys{/tkzDefPointBy/.cd, +translation/.code args={from #1 to #2}{% + \global\def\tkzfrom{#1}% + \global\def\tkzto{#2}% + \global\def\tkz@numtrsf{0}}, + homothety/.code args={center #1 ratio #2}{% + \global\def\tkzcenter{#1}% + \global\def\tkzratio{#2}% + \global\def\tkz@numtrsf{1}}, + reflection/.code args={over #1--#2}{% + \global\def\tkzdeb{#1}% + \global\def\tkzfin{#2}% + \global\def\tkz@numtrsf{2}}, + symmetry/.code args={center #1}{% + \global\def\tkzcenter{#1}% + \global\def\tkz@numtrsf{3}}, + projection/.code args={onto #1--#2}{% + \global\def\tkzdeb{#1}% + \global\def\tkzfin{#2}% + \global\def\tkz@numtrsf{4}}, + rotation/.code args={center #1 angle #2}{% + \global\def\tkzcenter{#1}% + \global\def\tkzangle{#2}% + \global\def\tkz@numtrsf{5}}, + rotation in rad/.code args={center #1 angle #2}{% + \global\def\tkzcenter{#1}% + \global\def\tkzangle{#2}% + \global\def\tkz@numtrsf{6}}, +inversion/.code args={center #1 through #2}{% + \global\def\tkzcenter{#1}% + \global\def\tkzpoint{#2}% + \global\def\tkz@numtrsf{7}} +} +%<--------------------------------------------------------------------------–> +\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\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\ExtractPoint#1,#2\@nil{% +\global\edef\tkz@LastList{#2} +\global\edef\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 +\global\def\tkz@LastList{#4} + \foreach\PointTR in {#3}{% + \FirstPointInList\tkz@LastList + \ifx\tkz@FirstPoint\tkzutil@empty + \global\edef\tkz@pointtsf{\PointTR '} + \else + \global\edef\tkz@pointtsf{\tkz@FirstPoint} + \fi + \tkzVecKCoLinear(#1,#2,\PointTR){\tkz@pointtsf}% +} +\endgroup +} +%<--------------------------------------------------------------------------–> +\def\tkzUTranslation(#1,#2)(#3){% +\begingroup + \tkzVecKCoLinear(#1,#2,#3){tkzPointResult}% +\endgroup +} + +%<--------------------------------------------------------------------------–> +% Symétrie par rapport à un point Homo with (-1) +% #2 le centre #3 l'antécédent +%<--------------------------------------------------------------------------–> +\def\tkzCSym(#1)(#2)#3{% +\begingroup +\global\def\tkz@LastList{#3} + \foreach\PointCS in {#2}{% + \FirstPointInList\tkz@LastList + \ifx\tkz@FirstPoint\tkzutil@empty + \global\edef\tkz@pointtsf{\PointCS '} + \else + \global\edef\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 +\global\def\tkz@LastList{#4} + \foreach\PointSO in {#3}{% + \FirstPointInList\tkz@LastList + \ifx\tkz@FirstPoint\tkzutil@empty + \global\edef\tkz@pointtsf{\PointSO '} + \else + \global\edef\tkz@pointtsf{\tkz@FirstPoint} + \fi + \pgfpointdiff{\pgfpointanchor{#1}{center}}% + {\pgfpointanchor{#2}{center}}% + \tkz@ax =\pgf@y% + \tkz@ay =\pgf@x% + \path[coordinate]% + (\PointSO)--++(-\tkz@ax,\tkz@ay) coordinate (tkz@point); + \tkzInterLL(#1,#2)(\PointSO,tkz@point)\tkzGetPoint{tkzPointofSym} + \tkz@VecK[2](\PointSO,tkzPointofSym){\tkz@pointtsf} +} +\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)\tkzGetPoint{tkzPointofSym} + \tkz@VecK[2](#3,tkzPointofSym){tkzPointResult} +\endgroup +} + +%<--------------------------------------------------------------------------–> +% Projection orthogonale sur une droite +%<--------------------------------------------------------------------------–> +\def\tkzProjection(#1,#2)(#3)#4{% +\begingroup +\global\def\tkz@LastList{#4} + \foreach\PointPJ in {#3}{% + \FirstPointInList\tkz@LastList + \ifx\tkz@FirstPoint\tkzutil@empty + \global\edef\tkz@pointtsf{\PointPJ '} + \else + \global\edef\tkz@pointtsf{\tkz@FirstPoint} + \fi + \tkzUProjection(#1,#2)(\PointPJ) + \tkzGetPoint{\tkz@pointtsf} + } +\endgroup +} +%<--------------------------------------------------------------------------–> +\def\tkzUProjection(#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)% définit tkzPointResult +\endgroup +} +%<--------------------------------------------------------------------------–> +\def\tkz@Projection(#1,#2)(#3)#4{% +\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); + \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 +\global\def\tkz@LastList{#4} + \foreach\PointHO in {#3}{% + \FirstPointInList\tkz@LastList + \ifx\tkz@FirstPoint\tkzutil@empty + \global\edef\tkz@pointtsf{\PointHO '} + \else + \global\edef\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 +\global\def\tkz@LastList{#4} + \foreach\PointRot in {#3}{% + \FirstPointInList\tkz@LastList + \ifx\tkz@FirstPoint\tkzutil@empty + \global\edef\tkz@pointtsf{\PointRot '} + \else + \global\edef\tkz@pointtsf{\tkz@FirstPoint} + \fi + \tkz@@extractxy{\PointRot} + \global\tkz@ax\pgf@x% + \global\tkz@ay\pgf@y% + \tkz@@extractxy{#1} + \global\tkz@bx\pgf@x% + \global\tkz@by\pgf@y% + \tkzmathrotatepointaround{\pgfpoint{\tkz@ax}{\tkz@ay}}% + {\pgfpoint{\tkz@bx}{\tkz@by}}% + {#2} + \global\tkz@bx\pgf@x% + \global\tkz@by\pgf@y% + \path[coordinate](\tkz@bx,\tkz@by)coordinate(\tkz@pointtsf);% + } + \endgroup +} +%<--------------------------------------------------------------------------–> +\def\tkzURotateAngle(#1,#2)(#3){% +\begingroup + \tkz@@extractxy{#3} + \global\tkz@ax\pgf@x% + \global\tkz@ay\pgf@y% + \tkz@@extractxy{#1} + \global\tkz@bx\pgf@x% + \global\tkz@by\pgf@y% + \tkzmathrotatepointaround{\pgfpoint{\tkz@ax}{\tkz@ay}}% + {\pgfpoint{\tkz@bx}{\tkz@by}}% + {#2} + \global\tkz@bx\pgf@x% + \global\tkz@by\pgf@y% + \path[coordinate](\tkz@bx,\tkz@by)coordinate(tkzPointResult);% + \endgroup +} +%<--------------------------------------------------------------------------–> +% % rotation en radian +% %<--------------------------------------------------------------------------–> +\def\tkzRotateInRad(#1,#2)(#3)#4{% +\begingroup +\global\def\tkz@LastList{#4} + \foreach\PointRot in {#3}{% + \FirstPointInList\tkz@LastList + \ifx\tkz@FirstPoint\tkzutil@empty + \global\edef\tkz@pointtsf{\PointRot '} + \else + \global\edef\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% + \tkzmathrotatepointaround{\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% + \tkzmathrotatepointaround{\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 +\global\def\tkz@LastList{#4} + \foreach\PointIP in {#3}{% + \FirstPointInList\tkz@LastList + \ifx\tkz@FirstPoint\tkzutil@empty + \global\edef\tkz@pointtsf{\PointIP '} + \else + \global\edef\tkz@pointtsf{\tkz@FirstPoint} + \fi + \tkzCalcLength[cm](#1,#2)\tkzGetLength{tkz@lna}% + \tkzCalcLength[cm](#1,\PointIP)\tkzGetLength{tkz@lnb}% + \FPeval\tkz@lnc{\tkz@lna/\tkz@lnb*\tkz@lna} + \tkzVecKNorm[\tkz@lnc](#1,\PointIP){tkzPointResult} + } +\endgroup +} \def\tkzUInversePoint(#1,#2)(#3){% +\begingroup + \tkzCalcLength[cm](#1,#2)\tkzGetLength{tkz@lna}% + \tkzCalcLength[cm](#1,#3)\tkzGetLength{tkz@lnb}% + \FPeval\tkz@lnc{\tkz@lna/\tkz@lnb*\tkz@lna} + \tkzVecKNorm[\tkz@lnc](#1,#3){tkzPointResult} +\endgroup +} +%<--------------------------------------------------------------------------–> +% Fin des transformations +%<--------------------------------------------------------------------------–> +%<--------------------------------------------------------------------------–> +% The SHOW +%<--------------------------------------------------------------------------–> +\def\tkz@numst{0} +\pgfkeys{/showtsf/.cd, + reflection/.code args={over #1--#2}{% + \def\tkzdeb{#1} + \def\tkzfin{#2} + \def\tkz@numst{0}}, + symmetry/.code args={center #1}{% + \def\tkzcenter{#1} + \def\tkz@numst{1}}, + projection/.code args={onto #1--#2}{% + \def\tkzdeb{#1} + \def\tkzfin{#2} + \def\tkz@numst{2}}, +translation/.code args={from #1 to #2}{% + \def\tkzfrom{#1}% + \def\tkzto{#2}% + \def\tkz@numst{3}}, + K/.code = \def\tkz@koeff{#1}, + length/.code = \def\tkz@show@length{#1}, + ratio/.code = \def\tkz@show@ratio{#1}, + gap/.code = \def\tkz@show@gap{#1}, + size/.code = \def\tkz@show@size{#1}, +/showtsf/.unknown/.code = {\let\searchname=\pgfkeyscurrentname + \pgfkeysalso{\searchname/.try=#1, + /compass/\searchname/.retry=#1, + /tikz/\searchname/.retry=#1}} +} +%<--------------------------------------------------------------------------–> +%<--------------------------------------------------------------------------–> +\def\tkzShowTransformation{\pgfutil@ifnextchar[{\tkz@ShowTransformation}{% + \tkz@ShowTransformation[]}} +\def\tkz@ShowTransformation[#1](#2){% +\begingroup + \pgfqkeys{/showtsf}{K=1,gap=2,size=1,ratio=.5,length=1} + \pgfqkeys{/showtsf}{#1} +\ifcase\tkz@numst% + % first case 0 + \tkzShowSymOrth[#1](\tkzdeb,\tkzfin)(#2) + \or% 1 + \tkzShowCSym[#1](\tkzcenter)(#2) + \or% 2 + \tkzShowProjection[#1](\tkzdeb,\tkzfin)(#2) + \or% 3 + \tkzShowTranslation[#1](\tkzfrom,\tkzto)(#2) + \fi +\endgroup +} +%<--------------------------------------------------------------------------–> +%<--------------------------------------------------------------------------–> +\def\tkzShowTranslation{\pgfutil@ifnextchar[{\tkz@ShowTranslation}{% + \tkz@ShowTranslation[]}} + +\def\tkz@ShowTranslation[#1](#2,#3)(#4){% +\begingroup +\tkz@VecKCoLinear[1](#2,#3,#4){tkz@lltmp} +\tkzCompass[#1](#4,tkz@lltmp) +\tkzCompass[#1,length=\tkz@show@ratio*\tkz@show@length](#3,tkz@lltmp) +\endgroup} +%<--------------------------------------------------------------------------–> +%<--------------------------------------------------------------------------–> +\def\tkzShowSymOrth{\pgfutil@ifnextchar[{\tkz@ShowSymOrth}{% + \tkz@ShowSymOrth[]}} +\def\tkz@ShowSymOrth[#1](#2,#3)(#4){% +\begingroup + \pgfpointdiff{\pgfpointanchor{#2}{center}}% + {\pgfpointanchor{#3}{center}}% + \tkz@ax =\pgf@y% + \tkz@ay =\pgf@x% + \path[coordinate](#4)--++(-\tkz@ax,\tkz@ay) coordinate (tkz@point); + \tkzInterLL(#2,#3)(#4,tkz@point) \tkzGetPoint{tkzPointofSym} + \tkz@VecK[2](#4,tkzPointofSym){tkz@pointtsf} + \tkzCompass[#1](#2,#4) + \tkzCompass[#1,length=\tkz@show@ratio*\tkz@show@length](#3,#4) + \tkzCompass[#1](#2,tkz@pointtsf) + \tkzCompass[#1,length=\tkz@show@ratio*\tkz@show@length](#3,tkz@pointtsf) +\endgroup +} +%<--------------------------------------------------------------------------–> +%<--------------------------------------------------------------------------–> +\def\tkzShowCSym{\pgfutil@ifnextchar[{\tkz@ShowCSym}{\tkz@ShowCSym[]}} + +\def\tkz@ShowCSym[#1](#2)(#3){% +\begingroup + \pgfpointdiff{\pgfpointanchor{#2}{center}}% + {\pgfpointanchor{#3}{center}}% + \tkz@ax=\pgf@x% + \tkz@ay=\pgf@y% +\path[coordinate](#2)--++(-\tkz@ax,-\tkz@ay) coordinate (tkz@pointtsf); + \tkzCompass[#1](#2,tkz@pointtsf) + \tkzCompass[#1](#2,#3) +\endgroup +} +%<--------------------------------------------------------------------------–> +%<--------------------------------------------------------------------------–> +\def\tkzShowProjection{\pgfutil@ifnextchar[{\tkz@ShowProjection}{% + \tkz@ShowProjection[]}} +\def\tkz@ShowProjection[#1](#2,#3)(#4){% +\begingroup + \pgfpointdiff{\pgfpointanchor{#2}{center}}% + {\pgfpointanchor{#3}{center}}% + \tkz@ax =\pgf@y% + \tkz@ay =\pgf@x% + \path[coordinate](#4)--++(-\tkz@ax,\tkz@ay) coordinate (tkz@point); + \tkzInterLL(#2,#3)(#4,tkz@point)\tkzGetPoint{tkz@pointtsf} + \tkz@VecKCoLinear[1](#2,#3,tkz@pointtsf){SO@tmp1} + \tkz@VecKCoLinear[-1](#2,#3,tkz@pointtsf){SO@tmp2} + \tkz@VecKNorm[\tkz@show@size](tkz@pointtsf,SO@tmp1){SO@1} + \tkz@VecKNorm[\tkz@show@size](tkz@pointtsf,SO@tmp2){SO@2} + \tkz@VecKNorm[-\tkz@show@gap](tkz@pointtsf,#4){SO@3} + \tkzCompass[#1](#4,SO@1) + \tkzCompass[#1](#4,SO@2) + \tkzCompass[#1](SO@1,SO@3) + \tkzCompass[#1,length=\tkz@show@ratio*\tkz@show@length](SO@2,SO@3) +\endgroup +} + +\endinput
\ No newline at end of file |