summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-show.tex
blob: 457fbed257af7436e71e3465f9eaf08b17c91c4a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
%tkz-obj-eu-show.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-obj-eu-show.tex} 
\makeatletter  
%<--------------------------------------------------------------------------–>
% finding specific points in a triangle
%<--------------------------------------------------------------------------–>
%                            equi points
%<--------------------------------------------------------------------------–>
% draw  ? show ?   
\pgfkeys{/tkzEquiPt/.cd,
    from/.store in      = {\tkz@frompoint},
    dist/.store in      = {\tkz@equ@dist},
    show/.is if         = tkz@equi@show,
    dist        = 2,
    show        = false,
     /tkzEquiPt/.search also={/tikz}
}

\def\tkzDefEquiPoints{\pgfutil@ifnextchar[{\tkz@DefEquiPoints}{%
                                           \tkz@DefEquiPoints[]}}
\def\tkz@DefEquiPoints[#1](#2,#3){%
\pgfqkeys{/tkzEquiPt}{#1}
\begingroup
   \tkzUProjection(#2,#3)(\tkz@frompoint)
   \pgfnodealias{tkzEQpoint}{tkzPointResult}
   \tkzVecKNorm[\tkz@equ@dist](tkzEQpoint,#2)
   \pgfnodealias{tkzFirstPointResult}{tkzPointResult}
   \tkzVecKNorm[-\tkz@equ@dist](tkzEQpoint,#2)
   \pgfnodealias{tkzSecondPointResult}{tkzPointResult}
   \iftkz@equi@show
      \tkzCompass[#1](\tkz@frompoint,tkzFirstPointResult)
      \tkzCompass[#1](\tkz@frompoint,tkzSecondPointResult)
   \fi
\endgroup
}

%<---------------------------    The SHOW   --------------------------------–>
%<--------------------------------------------------------------------------–>
\global\def\tkz@numsh{0}
\pgfkeys{/show/.cd,
    mediator/.code             =          \def\tkz@numsh{0},
    perpendicular/.code args   =  {through #1} {\global\def\tkz@numsh{1}%
                                              \def\tkz@through{#1}}, 
    orthogonal/.code args      =  {through #1} {\global\def\tkz@numsh{1}%
                                                \global\def\tkz@through{#1}},
    parallel/.code args         = {through #1} {\global\def\tkz@numsh{2}%
                                            \global\def\tkz@through{#1}},    
    bisector/.code                =           \global\def\tkz@numsh{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},
    /show/.unknown/.code        =   {\let\searchname=\pgfkeyscurrentname
                                   \pgfkeysalso{\searchname/.try=#1,
                                   /compass/\searchname/.retry=#1,
                                   /tikz/\searchname/.retry=#1}%
                   }
         }    
\def\tkzShowLine{\pgfutil@ifnextchar[{\tkz@ShowLine}{\tkz@ShowLine[]}}
\def\tkz@ShowLine[#1](#2){% 
\begingroup
\pgfqkeys{/show}{ K   = 1,
          gap   = 2,
          ratio = .5,
          length  = 1,
          size  = 1
          }  
\pgfqkeys{/show}{#1}  
\ifcase\tkz@numsh%
 % first case 0
  \tkzShowMediatorLine[#1](#2)  
 \or% 1
  \tkzShowOrthLine[#1](#2)(\tkz@through)  
 \or% 2
   \tkzShowLLLine[#1](#2)(\tkz@through)
 \or% 3
  \tkzShowBisectorLine[#1](#2)
\fi
\endgroup
}

\def\tkzShowMediatorLine{%
  \pgfutil@ifnextchar[{\tkz@ShowMediatorLine}{\tkz@ShowMediatorLine[]}}  
\def\tkz@ShowMediatorLine[#1](#2,#3){%
\begingroup
\pgfkeys{show/.cd,  gap    =  2,
          ratio  =  .5,
          length =  1
    }
\pgfkeys{show/.cd,#1}  
  \path (#2) -- (#3) coordinate[pos=.5](tkzmidpoint);
  \tkzURotateAngle(#2,60)(#3)       
  \pgfnodealias{tkzFirstPointResult}{tkzPointResult} 
  \tkzURotateAngle(#3,60)(#2)      
  \pgfnodealias{tkzSecondPointResult}{tkzPointResult} 
  \tkz@VecKOrthNorm[1](tkzmidpoint,#2)     
   \pgfnodealias{MED@tmp1}{tkzPointResult} 
  \tkz@VecKOrthNorm[1](tkzmidpoint,#3)      
  \pgfnodealias{MED@tmp2}{tkzPointResult} 
  \tkz@VecKNorm[\tkz@show@gap](tkzmidpoint,MED@tmp1)  
  \pgfnodealias{MED@1}{tkzPointResult} 
  \tkz@VecKNorm[\tkz@show@gap](tkzmidpoint,MED@tmp2) 
   \pgfnodealias{MED@2}{tkzPointResult} 
  \tkzCompass[#1,length=\tkz@show@ratio*\tkz@show@length](#2,MED@1)
  \tkzCompass[#1](#3,MED@1)
  \tkzCompass[#1,length=\tkz@show@ratio*\tkz@show@length](#2,MED@2)
  \tkzCompass[#1](#3,MED@2)
\endgroup
}
\def\tkzShowLLLine{\pgfutil@ifnextchar[{\tkz@ShowLLLine}{\tkz@ShowLLLine[]}}  
\def\tkz@ShowLLLine[#1](#2,#3)(#4){%
\begingroup
\pgfkeys{show/.cd,gap=2,ratio=.75,length=1}
\pgfkeys{show/.cd,#1}   
    \tkz@VecKCoLinear[1](#2,#3,#4)
     \pgfnodealias{tkz@lltmp}{tkzPointResult}
    \tkzCompass[#1](#4,tkz@lltmp)
    \tkzCompass[#1,length=\tkz@show@ratio*\tkz@show@length](#3,tkz@lltmp)
\endgroup
} 

%<--------------------------------------------------------------------------–>
%                        tkzLineOrth 
%<--------------------------------------------------------------------------–>
% pas de projection ortho car le point peut être sur la droite.
% manque les tests . Il faudrait voir si on peut projeter et choisir
\def\tkzShowOrthLine{\pgfutil@ifnextchar[{\tkz@ShowOrthLine}{\tkz@ShowOrthLine[]}} 
\def\tkz@ShowOrthLine[#1](#2,#3)(#4){% 
\begingroup
\pgfkeys{show/.cd,  ratio = .75,
          length  = 1,
          gap   = -1} % ????
\pgfkeys{show/.cd,#1}  %????
    \tkzVecKOrth(#2,#3)                
    \pgfnodealias{tkz@OLtmp}{tkzPointResult}
    \tkz@VecKCoLinear[1](#2,tkz@OLtmp,#4)      
    \pgfnodealias{tkzPointCo}{tkzPointResult}
    \tkzInterLL(#2,#3)(#4,tkzPointCo)
    \pgfnodealias{tkzPOpoint}{tkzPointResult}
    \tkzCalcLength(#4,tkzPOpoint)           
    \tkzGetLength{tkz@mathLen}
    \tkz@VecKNorm[1](#2,#3)
    \pgfnodealias{PO@tmp}{tkzPointResult}
    \tkz@VecKCoLinear[1](#2,PO@tmp,tkzPOpoint)  
    \pgfnodealias{PO@tmp2}{tkzPointResult}
    \tkz@VecKCoLinear[-1](#2,PO@tmp,tkzPOpoint)
    \pgfnodealias{PO@tmp1}{tkzPointResult}
    \tkz@VecKCoLinear[2](tkzPOpoint,PO@tmp1,tkzPOpoint) 
    \pgfnodealias{PO@1}{tkzPointResult}
    \tkz@VecKCoLinear[2](tkzPOpoint,PO@tmp2,tkzPOpoint)
    \pgfnodealias{PO@2}{tkzPointResult}
    \ifdim\tkz@mathLen pt>10 pt\relax
        \tkz@VecKNorm[1](#4,tkzPOpoint)
        \pgfnodealias{PO@tmp1}{tkzPointResult}
      \else
        \tkz@VecKOrthNorm[1](tkzPOpoint,PO@2)
        \pgfnodealias{PO@tmp1}{tkzPointResult}
     \fi
    \tkz@VecKCoLinear[-\tkz@show@gap](PO@tmp1,tkzPOpoint,tkzPOpoint)
    \pgfnodealias{PO@3}{tkzPointResult}
    \tkzCompass[#1,length=\tkz@show@ratio *\tkz@show@length](#4,PO@1)
    \tkzCompass[#1,length=\tkz@show@ratio *\tkz@show@length](#4,PO@2)
    \tkzCompass[#1,length=\tkz@show@ratio *\tkz@show@length](PO@1,PO@3)
    \tkzCompass[#1,length=\tkz@show@length](PO@2,PO@3) 
\endgroup
}    
%<-------------------------------------------------------------------------–> 
%    bisector Line
%<-------------------------------------------------------------------------–> 
\def\tkzShowBisectorLine{%
    \pgfutil@ifnextchar[{\tkz@ShowBisectorLine}{\tkz@ShowBisectorLine[]}}   
\def\tkz@ShowBisectorLine[#1](#2,#3,#4){% 
\begingroup
\pgfkeys{show/.cd,  gap   = 2,
          ratio =.  5,
          length  = 1,
          size  = 1}
\pgfkeys{show/.cd,#1}    
  \tkzVecKNorm(#3,#2)           
    \pgfnodealias{tkz@pt1}{tkzPointResult}  
  \tkzVecKNorm(#3,#4)           
    \pgfnodealias{tkz@pt2}{tkzPointResult}
  \tkzDefMidPoint(tkz@pt1,tkz@pt2)    
    \pgfnodealias{tkz@pt3}{tkzPointResult}
  \tkzDefEquilateral(tkz@pt2,tkz@pt1)   
    \pgfnodealias{tkz@pt4}{tkzPointResult}
  \tkzDefMidPoint(tkz@pt3,tkz@pt4)    
    \pgfnodealias{tkz@ptm}{tkzPointResult}
  \tkzVecKNorm(#3,tkz@ptm)        
    \pgfnodealias{tkzBisPoint}{tkzPointResult}
  \tkzVecKNorm[\tkz@show@size](#3,#2)   
    \pgfnodealias{BI@1}{tkzPointResult}
  \tkzVecKNorm[\tkz@show@size](#3,#4)   
    \pgfnodealias{BI@2}{tkzPointResult}  
  \tkzVecK[\tkz@show@gap](#3,tkzBisPoint) 
    \pgfnodealias{tkzBisPoint}{tkzPointResult}
  \tkzCompass[#1,length=\tkz@show@ratio *\tkz@show@length](#3,BI@1)
  \tkzCompass[#1,length=\tkz@show@ratio *\tkz@show@length](#3,BI@2)
  \tkzCompass[#1,length=\tkz@show@length](BI@1,tkzBisPoint)
  \tkzCompass[#1,length=\tkz@show@ratio *\tkz@show@length](BI@2,tkzBisPoint)  
\endgroup    
}
%<--------------------------------------------------------------------------–>
%                        Transformations Géométriques
%<--------------------------------------------------------------------------–>
%<--------------------------------------------------------------------------–>
%                   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} 
 \pgfinterruptboundingbox  
\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  
	\endpgfinterruptboundingbox   
\endgroup
}
%<--------------------------------------------------------------------------–>
%<--------------------------------------------------------------------------–>
\def\tkzShowTranslation{\pgfutil@ifnextchar[{\tkz@ShowTranslation}{%
                                          \tkz@ShowTranslation[]}}  

\def\tkz@ShowTranslation[#1](#2,#3)(#4){%
\begingroup
\tkz@VecKCoLinear[1](#2,#3,#4) \pgfnodealias{tkz@lltmp}{tkzPointResult}
\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)  
  \pgfnodealias{tkzPointofSym}{tkzPointResult}
  \tkz@VecK[2](#4,tkzPointofSym) 
  \pgfnodealias{tkz@pointtsf}{tkzPointResult}  
  \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)          
  \pgfnodealias{tkz@pointtsf}{tkzPointResult}
  \tkz@VecKCoLinear[1](#2,#3,tkz@pointtsf)        
  \pgfnodealias{SO@tmp1}{tkzPointResult}
  \tkz@VecKCoLinear[-1](#2,#3,tkz@pointtsf)       
  \pgfnodealias{SO@tmp2}{tkzPointResult}
  \tkz@VecKNorm[\tkz@show@size](tkz@pointtsf,SO@tmp1)   
  \pgfnodealias{SO@1}{tkzPointResult}
  \tkz@VecKNorm[\tkz@show@size](tkz@pointtsf,SO@tmp2)   
  \pgfnodealias{SO@2}{tkzPointResult}
  \tkz@VecKNorm[-\tkz@show@gap](tkz@pointtsf,#4)      
  \pgfnodealias{SO@3}{tkzPointResult}
  \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
}   
%<-------------------------------------------------------------------------–> 
%<-------------------------------------------------------------------------–> 

\makeatother  
\endinput