summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/doc/generic/pst-geometrictools/pst-geometrictools-doc.tex
blob: 47b04b6f2d83f2b0bed7091f0f7896f3c7fb5807 (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
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
%%
%% This is file `pst-geometrictools-doc.tex',
%%
%% IMPORTANT NOTICE:
%%
%% Package `pst-geometrictools.tex'
%%
%% Thomas Söll
%%
%% This program can redistributed and/or modified under %%
%% the terms of the LaTeX Project Public License              %%
%% Distributed from CTAN archives in directory                %%
%% macros/latex/base/lppl.txt; either version 1.3c of       %%
%% the License, or (at your option) any later version.       %%
%%
%% DESCRIPTION:
%%   `pst-geometrictools' is a PSTricks package to draw a protractor, a ruler, a compass and pencils 
%%
%%


\listfiles
\RequirePackage{pdfmanagement-testphase}
\DeclareDocumentMetadata{}
%% $Id: pst-venn-doc.tex 848 2018-12-04 09:25:49Z herbert $
\documentclass[fontsize=11pt,english,BCOR=10mm,DIV=12,bibliography=totoc,parskip=false,headings=small,
    headinclude=false,footinclude=false,oneside]{pst-doc}

\usepackage[autostyle]{csquotes}
%\addbibresource{pst-geometrictools-doc.bib}
\let\pstpersFV\fileversion
\usepackage{pst-geometrictools,pst-node,pstricks-add,animate}

\let\belowcaptionskip\abovecaptionskip

\parindent0pt

\psset{arrowlength=2.8,arrowinset=0.1}

\def\bgImage{%
\begin{pspicture}(-7,-3)(7,7)%
\psProtractor[ProScale=0.75]{-5}(-2,2)%
\psRuler[RulerFillCol=Blue!80,RulerScale=0.75]{190}(1,5)
\psPencil[pencilColA=Green,PenScale=0.75]{10}(-2,2)
\psPencil[PenLength=2,pencilColA=red,PenScale=0.75]{-20}(1,5)
\psCompass[PoCScale=1.25,PoCFillCol=Yellow,PoCAngle=0,PoCMineCol=Green]{5}(3.5,-3.5)(7.5,-3.5)
\end{pspicture}
}

\lstset{language=PSTricks,morekeywords={psdot,psIntersectionPoint,psProtractor,psCompass,psPencil,psRuler,psParallels,psGetAngleABC,pstGeonode,midAB,pstRightAngle,perspective,multiframe,psline}\footnotesize\ttfamily}

\newpsstyle{Parallelen}{country=G,ProScale=0.5,ProLineCol=cyan,ProFillCol=gray!50,OwnerTxt=Pythagoras,MadeTxt={Geodreieck},RulerFillCol=cyan!40}


\begin{document}

\title{pst-geometrictools v 1.3}
\subtitle{A PSTricks package to draw a protractor, a ruler, a compass and pencils}
\author{Thomas Söll\\Herbert Voß (bugfix)}
\date{\today}

\settitle

\tableofcontents

\begin{abstract}
The package \LPack{pst-geometrictools} offers some customizable options to setup a \emph{protractor}, a \emph{ruler}, 
a \emph{compass} and \emph{pencils} to the users'  wishes. Some geometric tools are predefined
 and ready-to-use for the customer to be able to present some pixel-free graphics showing the handling of some geometric tools.

The geometric tools can be scaled, rotated, positioned, colored as wanted, even labeled---if wanted.

These tools were already available since years within diverse examples---however not yet packaged together in pure PostScript. This was done within this package.

We recommend to use the package \LPack{pst-eucl} (by \textit{Dominique Rodriguez}) which makes it easy to position the tools precisely.

Have fun to use it!

\bigskip
This program can redistributed and/or modified under the terms of the LaTeX Project Public License Distributed from CTAN archives in directory macros/latex/base/lppl.txt; 
either version 1.3c of the License, or (at your option) any later version.
\end{abstract}



\clearpage


\section{How to use the commands}

\subsection{\textbackslash psProtractor}

\begin{BDef}
\Lcs{psProtractor}\OptArgs\Largb{angle}\Largr{coordinates of the origin}\\
\Lcs{psProtractor}\OptArgs\Largb{angle}\Largr{coordinates of the origin}\Largr{coordinates of a second point}
\end{BDef}

The command \Lcs{psProtractor} contains the options \nxLkeyword{ProScale=}, \nxLkeyword{ProLineCol=}, \nxLkeyword{ProFillCol=}, \nxLkeyword{OwnerTxt=}, 
\nxLkeyword{MadeTxt=}, \nxLkeyword{PSfontO=}, \nxLkeyword{fontsizeO=}, \nxLkeyword{PSfontM=}, \nxLkeyword{fontsizeM=}, \nxLkeyword{country=} and \nxLkeyword{Ghost=}.

\begin{quote}
\begin{tabularx}{\linewidth}{ @{} l >{\ttfamily}l X @{} }\toprule
\emph{Name}           & \emph{Default} & \emph{Meaning} \\\midrule
\Lkeyword{ProScale}     & 1          & scale factor\\
\Lkeyword{ProFillCol}     & gray!60          & transparent fill color of the protrace\\
\Lkeyword{ProLineCol}     & cyan          & linecolor of the protrace\\
\Lkeyword{OwnerTxt}    & T.S.             & Name of the owner\\
\Lkeyword{MadeTxt}  & Made in NES   & Made in wherever\\
\Lkeyword{PSfontO}  & Symbol   & PSfont for the owner\\
\Lkeyword{fontsizeO}  & 10pt   & fontsize for the owner\\
\Lkeyword{PSfontM}  &  Times-Roman  & PSfont for Made in wherever\\
\Lkeyword{fontsizeM}  & 6pt  &  fontsize for Made in wherever\\
\Lkeyword{country}  & Germany  & Permissible values: Germany, France\\
\Lkeyword{Ghost}  & false  & true: not showing the protrace itself, but getting the nodes of its verices\\
\bottomrule
\end{tabularx}
\end{quote}

This above introduced command \Lcs{psProtractor} automatically provides three nodes of the vertices of the protractor which are named as follows: \texttt{GeodrA}, \texttt{GeodrB}, \texttt{GeodrC}

These nodes maybe very helpful.

The command \Lcs{psProtractor} offers a positioning
\begin{itemize}
\item either by one point and an angle of rotation
\item or by two points (and an additional angle of rotation)
\end{itemize}


\subsection{\textbackslash psRuler}

\begin{BDef}
\Lcs{psRuler}\OptArgs\Largb{angle}\Largr{coordinates of origin}
\\
\Lcs{psRuler}\OptArgs\Largb{angle}\Largr{coordinates of origin}\Largr{coordinates of a second point}
\end{BDef}

The command \Lcs{psRuler} contains the options \nxLkeyword{RulerScale=} and \nxLkeyword{RulerFillCol=}.

\begin{quote}
\begin{tabularx}{\linewidth}{ @{} l >{\ttfamily}l X @{} }\toprule
\emph{Name}           & \emph{Default} & \emph{Meaning} \\\midrule
\Lkeyword{RulerScale}     & 1          & scale factor of the ruler\\
\Lkeyword{RulerFillCol}    & gray           & color of the ruler\\
\bottomrule
\end{tabularx}
\end{quote}

The command \Lcs{psRuler} offers a positioning

\begin{itemize}
\item either by one point and an angle of rotation
\item or by two points (and an additional angle of rotation)
\end{itemize}


\newpage


\subsection{\textbackslash psCompass}

\begin{BDef}
\Lcs{psCompass}\OptArgs\Largb{radius}\Largr{coordinates of  origin}\\
\Lcs{psCompass}\OptArgs\Largb{radius}\Largr{coordinates of origin}\Largr{coordinates of a second point}
\end{BDef}

The command \Lcs{psCompass} contains the options \nxLkeyword{PoCAngle=}, \nxLkeyword{MCAngle=}, \nxLkeyword{PoCLength}, 
\nxLkeyword{PoCFillCol=}, \nxLkeyword{PoCMineCol=}, \nxLkeyword{RadVS=}, \nxLkeyword{AngleVS=}, \nxLkeyword{RadMul=} and \nxLkeyword{PoCScale=}.

\begin{quote}
\begin{tabularx}{\linewidth}{ @{} l >{\ttfamily}l X @{} }\toprule
\emph{Name}           & \emph{Default} & \emph{Meaning} \\\midrule
\Lkeyword{PoCAngle}     & 0          & angle of rotation\\
\Lkeyword{PoCLength}     & 5          & length of the compass\\
\Lkeyword{PoCFillCol}    & gray!60           & color of the compass\\
\Lkeyword{PoCMineCol}  & gray!60   & color of the mine\\
\Lkeyword{PoCScale}  & 1   & scaling factor \\
\Lkeyword{MCAngle} & false & suppresses the initial angle, when two points are given\\
\Lkeyword{RadVS} & RVS & PostScript value for the radius\\
\Lkeyword{AngleVS} & AVS & PostScript value for the angle\\
\Lkeyword{RadMul} & 1 & multiplication factor for the radius\\
\bottomrule
\end{tabularx}
\end{quote}

The command \Lcs{psCompass} offers a positioning
\begin{itemize}
\item either by one point and the radius---a rotation is set with \texttt{[PoCAngle=30]}.
\item or by two points (the radius and initial angle then are calculated automatically)---if one sets an additional rotation with \texttt{[PoCAngle=30]}, 
these two angles are automatically added. If one will suppress the initial rotation, then set \texttt{[MCAngle=false]}. 
Using \texttt{RadVS=<unique name>} and \texttt{AngleVS=<unique name>} you can use the values of the radius respectively the angle within some PostScript calculations. 
When you like to use a radius other than the distance between the two points that automatically calculates the radius, use \texttt{RadMul=<decimal number>} to multiply the initial radius with this factor.
\end{itemize}


\subsection{\textbackslash psPencil}

\begin{BDef}
\Lcs{psPencil}\OptArgs\Largb{angle}\Largr{coordinates of the cone end}
\end{BDef}

The command \Lcs{psPencil} contains the options \nxLkeyword{PenScale=}, \nxLkeyword{PenLength=}, \nxLkeyword{pencilColA=} and \nxLkeyword{pencilColB=}.

\begin{quote}
\begin{tabularx}{\linewidth}{ @{} l >{\ttfamily}l X @{} }\toprule
\emph{Name}           & \emph{Default} & \emph{Meaning} \\\midrule
\Lkeyword{PenScale}     & 1          & scale factor\\
\Lkeyword{PenLength}    & 5           & length of the pencil\\
\Lkeyword{pencilColA}  & red   & color of the pencil\\
\Lkeyword{pencilColB}  & HolzCol   & color of the wooden cone end \\
\bottomrule
\end{tabularx}
\end{quote}


\newpage



\subsection{\textbackslash psParallels (Idea and realization by \emph{Manuel Luque})}

\begin{BDef}
\Lcs{psParallels}\OptArgs\Largr{pointA}\Largr{pointB}\Largr{pointC}
\end{BDef}

The command \Lcs{psParallels} contains the option \nxLkeyword{DistCoeff}.

\begin{quote}
\begin{tabularx}{\linewidth}{ @{} l >{\ttfamily}l X @{} }\toprule
\emph{Name}           & \emph{Default} & \emph{Meaning} \\\midrule
\Lkeyword{DistCoeff}     & 1          & relative disctance between (AB) and C\\
\bottomrule
\end{tabularx}
\end{quote}

This command is made to directly draw a line parallel to the line containing \texttt{pointA} and \texttt{pointB} 
intersecting at point \texttt{pointC}.


\begin{LTXexample}[pos=t,width=\linewidth]
\psscalebox{0.5}{%
\begin{pspicture}[showgrid=false](-15,-10)(5,3)%
  \pnode(-6,1){A}\uput[100](A){A}
  \pnode(1,2){B}\uput[100](B){B}
  \pnode(2,0){C}\uput[90](C){C}
  \pcline[linecolor=BrickRed,nodesepA=-2,nodesepB=-2](A)(B)%
  \psParallels[style=Parallelen,RulerScale=0.5,ProScale=1,DistCoeff=1](A)(B)(C)
  \pcline[linecolor=BrickRed](GeodrB)(GeodrA)%
  \midAB(GeodrB)(GeodrA){M}%
  \psPencil[PenLength=5,pencilColA=red,PenScale=0.5]{60}(M)
  \end{pspicture}}
\end{LTXexample}


The command \verb+\psParallels[DistCoeff=1](A)(B)(C){angle}+ allows to draw a parallel through the 
point C with the help of a ruler and protractor. The angle is the one between the pencil and the vertical. 
The command uses the option [DistCoef=] as within pst-eucl. If [DistCoef=0] the hypotenuse of the 
protractor lays on the line (AB), the ruler automatically positions below the protractor.

For an animation, we vary [DistCoef=0..1], the protractor moves along the ruler letting the 
hypotenuse parallel to the line (AB). If [DistCoef=1], the protractor intersects with the point C. 
We can now draw the parallel to (AB) intersecting C.





\newpage


\section{Basic Examples}

\begin{LTXexample}[pos=t,width=16cm]
\psscalebox{0.7}{%
\begin{pspicture}[showgrid=false](-6,-5.5)(10,7)
\psProtractor{0}(0,0)% origin of the protractor
\psRuler{0}(0,0)% origin of the ruler
\psPencil{-30}(6,0)% origin of the pencil
\psCompass{3}(2,0)% origin of the compass
\end{pspicture}}
\end{LTXexample}

We see, that the origins of the \emph{protractor} and \emph{ruler}, \emph{compass} and respectively the \emph{cone end of the pencil} are positioned at $(0|0)$, $(2|0)$, $(6|0)$. Adding an angle rotates the objects around their origins.

For the \emph{protractor} and \emph{ruler}, there are two ways to position them:

\begin{itemize}
\item one point and an angle, like:

\Lcs{psProtractor}\OptArgs\Largb{<angle>}\Largr{<point>}\\
\Lcs{psRuler}\OptArgs\Largb{<angle>}\Largr{<point>}

This is quite self-explanatory. The origin is positioned  at the point and the tool is rotated around this point by the chosen angle.
\item two points and an additional angle, like:

\Lcs{psProtractor}\OptArgs\Largb{<additional angle>}\Largr{<pointA>}\Largr{<pointB>}\\
\Lcs{psRuler}\OptArgs\Largb{<additional angle>}\Largr{<pointA>}\Largr{<pointB>}

The origin of the tool is set to pointA. The hypotenuse of the protractor is aligned to the line between pointA and pointB, when the additional angle is chosen to $0$.
\end{itemize}


\newpage


\begin{LTXexample}[pos=t,width=16cm]
\begin{pspicture}(-8,-6.5)(8,2)
\pnode(-2,-1){A}\psdot[linecolor=Green,dotsize=5pt](A)\uput[90](A){A}
\pnode(5,-2){B}\psdot[linecolor=Green,dotsize=5pt](B)\uput[180](B){B}
\psProtractor[ProScale=0.5]{30}(A)
\psProtractor[ProLineCol=Yellow,ProScale=0.5]{90}(B)
\end{pspicture}
\end{LTXexample}

\begin{LTXexample}[pos=t,width=13cm]
\begin{pspicture}(-8,-6.5)(5,2)
\pnode(-2,-2){A}\psdot[linecolor=Green,dotsize=5pt](A)\uput[45](A){A}
\pnode(5,-4){B}\psdot[linecolor=Green,dotsize=5pt](B)\uput[45](B){B}
\pcline[linecolor=Green](A)(B)
\psProtractor[ProScale=0.5]{0}(A)(B)
\psProtractor[ProLineCol=Yellow,ProScale=0.5]{190}(A)(B)
\end{pspicture}
\end{LTXexample}


\newpage


The predefined nodes of a protractor.

\begin{LTXexample}[pos=t,width=13cm]
\begin{pspicture}(-8,-6.5)(5,0.3)
\psProtractor[ProScale=0.75]{0}(0,0)
\psdot[linecolor=Green,dotsize=7pt](GeodrA)\uput[45](GeodrA){GeodrA}
\psdot[linecolor=Blue,dotsize=7pt](GeodrB)\uput[135](GeodrB){GeodrB}
\psdot[linecolor=BrickRed,dotsize=7pt](GeodrC)\uput[-90](GeodrC){GeodrC}
\end{pspicture}
\end{LTXexample}

Compass

\begin{LTXexample}[pos=t,width=12cm]
\begin{pspicture}(-6,-2)(6,6)%
\pnode(-1,0){A}\psdot[dotsize=3pt,linecolor=red](A)
\pnode(1,0){B}\psdot[dotsize=3pt,linecolor=Green](B)
\pscircle(A){2}
\pcline[linecolor=BrickRed,nodesepA=-9,nodesepB=-6](A)(B)
\psCompass[PoCAngle=70,PoCScale=0.8]{2}(A)
\pnode(2,0){A}\psdot[dotsize=3pt,linecolor=red](A)
\pnode(6,0){B}\psdot[dotsize=3pt,linecolor=Green](B)
\psCompass[PoCScale=1,PoCFillCol=Yellow,PoCAngle=0,PoCMineCol=Green]{5}(A)(B)
\end{pspicture}
\end{LTXexample}


\newpage


\section{Advanced examples}

Measuring the angles of a given triangle.

\begin{LTXexample}[pos=t,width=17cm]
\newpsstyle{WkMessung}{linestyle=none,AngleValue=true,ArcColor=Green,arrows=->,WedgeOpacity=0.6,WedgeColor=Green!30,LabelSep=1.6,MarkAngleRadius=2.8,linecolor=Green,decimals=1,comma,xShift=-6,yShift=9}
\newpsstyle{GeoDrG}{country=G,ProScale=1,ProLineCol=Green,ProFillCol=Green!50,OwnerTxt={Pythagoras},MadeTxt={Geodreieck}}
\begin{pspicture}(0,-1)(17,10)
\pnode(8,0){S}\uput[d](S){S}\psdot(S)
\pnode(17,0){B}
\rput(S){\pnode(7;35){C}}
\pcline[linecolor=blue,nodesepB=-0](S)(B)
\pcline[linecolor=red,nodesepB=-2](S)(C)
\psProtractor[style=GeoDrG]{0}(S)(B)
\psIntersectionPoint(S)(C)(GeodrB)(GeodrC){D}% pstricks-add
\pcline[linecolor=Green,arrowinset=0.1,arrowlength=2,linewidth=2pt]{->}([offset=1.5cm]D)(D)
\psGetAngleABC[style=WkMessung](B)(S)(C){\Large\color{Green}$\alpha$}% pst-eucl
\rput([offset=4.5]D){\psframebox[framesep=6pt,framearc=0.2]{
\begin{minipage}[t]{5.5cm}
Lege das Geodreieck auf den blauen Schenkel, so dass die  Null auf dem Scheitel S liegt. Lies nun am \"au\ss eren Rand den Winkel ab (gr\"uner Pfeil).
\end{minipage}
}}
\end{pspicture}
\end{LTXexample}

\begin{LTXexample}[pos=t,width=16cm]
\begin{pspicture}(-9,-6)(7,10)
\pnode(1,7){A}
\pnode(-5,0){B}
\pnode(5,-2){C}
\pspolygon[linecolor=red](A)(B)(C)
\psProtractor[ProScale=0.5]{0}(A)(B)
\psProtractor[ProScale=0.5]{0}(B)(C)
\psProtractor[ProScale=0.5]{0}(C)(A)
\end{pspicture}
\end{LTXexample}


\newpage


Constructing the height of a given triangle.

\begin{LTXexample}[pos=t,width=16cm]
\begin{pspicture}(-6,-4.5)(5,8)
\pnode(1,7){A}
\pnode(-5,1){B}
\pnode(3,2){C}
\uput[ur](A){A}
\uput[d](B){B}
\uput[d](C){C}
\pspolygon(A)(B)(C)
\pstProjection{B}{C}{A}[A']% pst-eucl
\psProtractor[ProScale=0.8,OwnerTxt={Height of a triangle},MadeTxt={Made in NES},PSfontO=Helvetica,PSfontM=Times-Roman,fontsizeO=8,fontsizeM=6]{0}(A')(A)
\pcline[linecolor=red,linestyle=dashed,linewidth=2pt](GeodrC)(A')
\pstRightAngle[RightAngleType=german]{C}{A'}{A}% pst-eucl
\end{pspicture}
\end{LTXexample}


\newpage


%Using the package \LPack{pst-pers} (by \emph{Manuel Luque} avec la collaboration de \emph{Thomas Söll} et \emph{Jürgen Gilg}), we have the full range to project objects into whatever planes we want.
%
%Here we present a little example, setting the protractor into the [$x,y$]-plane, whereas the compass is set into the [$y,z$]-plane.
%
%\begin{LTXexample}[pos=t,width=16cm]
%\begin{pspicture}(-8,-1.75)(9,7)
%\perspective[normal=0 90](0,0,0){% pst-pers
%\psarc[linecolor=green](0,0){2}{180}{0}
%\psProtractor{0}(0,0)(2,0)
%}
%\perspective[normal=0 0](0,0,0){% pst-pers
%\psCompass[PoCAngle=0,PoCScale=1,PoCMineCol=green]{2}(0,0)
%}
%\end{pspicture}
%\end{LTXexample}
%
%
%\newpage


%\section{Animations}
%
%\begin{LTXexample}[pos=t,width=17cm]
%\begin{animateinline}[% animate
%controls,
%palindrome,
%begin={\begin{pspicture}(-8,-1.75)(9,7)},
%end={\end{pspicture}}]{10}% 10 frames/s (velocity of the animation)
%\multiframe{73}{rB=0+2.5}{% number of frames
%\perspective[normal=0 90](0,0,0){% pst-pers
%    \psarc[linecolor=Green](0,0){2}{0}{\rB}
%    \psProtractor[ProLineCol=Yellow]{180}(0,0)(2,0)
%    }
%\perspective[normal=\rB\space 0](0,0,0){% pst-pers
%    \psCompass[PoCAngle=0,PoCScale=1,PoCMineCol=Green]{2}(0,0)
%    }
%}
%\end{animateinline}
%\end{LTXexample}
%
%
%\clearpage


\section{List of all optional arguments for \texttt{pst-geometrictools}}

\xkvview{family=pst-geometrictools,columns={key,type,default}}


\clearpage


%\nocite{*}
%\bgroup
%\RaggedRight
%\printbibliography
%\egroup


\printindex
\end{document}