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
|
\section{Definition of a point}
Points can be specified in any of the following ways:
\begin{itemize}
\item Cartesian coordinates;
\item Polar coordinates;
\item Named points;
\item Relative points.
\end{itemize}
Even if it's possible, I think it's a bad idea to work directly with coordinates. Preferable is to use named points.
A point is defined if it has a name linked to a unique pair of decimal numbers.
Let $(x,y)$ or $(a:d)$ i.e. ($x$ abscissa, $y$ ordinate) or ($a$ angle: $d$ distance).
This is possible because the plan has been provided with an orthonormed Cartesian coordinate system. The working axes are supposed to be (ortho)normed with unity equal to $1$~cm or something equivalent like $0.39370$~in.
Now by default if you use a grid or axes, the rectangle used is defined by the coordinate points: $(0,0)$ and $(10,10)$. It's the macro \tkzcname{tkzInit} of the package \tkzNamePack{tkz-base} that creates this rectangle. Look at the following two codes and the result of their compilation:
\begin{tkzexample}[latex=10cm,small]
\begin{tikzpicture}
\tkzGrid
\tkzDefPoint(0,0){O}
\tkzDrawPoint[red](O)
\tkzShowBB[line width=2pt,teal]
\end{tikzpicture}
\end{tkzexample}
\begin{tkzexample}[latex=7cm,small]
\begin{tikzpicture}
\tkzDefPoint(0,0){O}
\tkzDefPoint(5,5){A}
\tkzDrawSegment[blue](O,A)
\tkzDrawPoints[red](O,A)
\tkzShowBB[line width=2pt,teal]
\end{tikzpicture}
\end{tkzexample}
The Cartesian coordinate $(a,b)$ refers to the
point $a$ centimeters in the $x$-direction and $b$ centimeters in the
$y$-direction.
A point in polar coordinates requires an angle $\alpha$, in degrees,
and a distance $d$ from the origin with a dimensional
unit by default it's the \texttt{cm}.
\begin{minipage}[b]{0.5\textwidth}
Cartesian coordinates
\begin{tkzexample}[vbox,small]
\begin{tikzpicture}[scale=1]
\tkzInit[xmax=5,ymax=5]
\tkzDefPoints{0/0/O,1/0/I,0/1/J}
\tkzDrawXY[noticks,>=latex]
\tkzDefPoint(3,4){A}
\tkzDrawPoints(O,A)
\tkzLabelPoint(A){$A_1 (x_1,y_1)$}
\tkzShowPointCoord[xlabel=$x_1$,
ylabel=$y_1$](A)
\tkzLabelPoints(O,I)
\tkzLabelPoints[left](J)
\tkzDrawPoints[shape=cross](I,J)
\end{tikzpicture}
\end{tkzexample}%
\end{minipage}
\begin{minipage}[b]{0.5\textwidth}
Polar coordinates
\begin{tkzexample}[vbox,small]
\begin{tikzpicture}[,scale=1]
\tkzInit[xmax=5,ymax=5]
\tkzDefPoints{0/0/O,1/0/I,0/1/J}
\tkzDefPoint(40:4){P}
\tkzDrawXY[noticks,>=triangle 45]
\tkzDrawSegment[dim={$d$,
16pt,above=6pt}](O,P)
\tkzDrawPoints(O,P)
\tkzMarkAngle[mark=none,->](I,O,P)
\tkzFillAngle[fill=blue!20,
opacity=.5](I,O,P)
\tkzLabelAngle[pos=1.25](I,O,P){$\alpha$}
\tkzLabelPoint(P){$P (\alpha : d )$}
\tkzDrawPoints[shape=cross](I,J)
\tkzLabelPoints(O,I)
\tkzLabelPoints[left](J)
\end{tikzpicture}
\end{tkzexample}
\end{minipage}%
The \tkzNameMacro{tkzDefPoint} macro is used to define a point by assigning coordinates to it. This macro is based on \tkzNameMacro{coordinate}, a macro of \TIKZ. It can use \TIKZ-specific options such as \tkzname{shift}. If calculations are required then the \tkzNamePack{xfp} package is chosen. We can use Cartesian or polar coordinates.
\subsection{Defining a named point \tkzcname{tkzDefPoint}}
\begin{NewMacroBox}{tkzDefPoint}{\oarg{local options}\parg{$x,y$}\marg{name} or \parg{$\alpha$:$d$}\marg{name}}%
\begin{tabular}{lll}%
arguments & default & definition \\
\midrule
\TAline{($x,y$)}{no default}{$x$ and $y$ are two dimensions, by default in cm.}
\TAline{($\alpha$:$d$)}{no default}{$\alpha$ is an angle in degrees, $d$ is a dimension}
\TAline{\{name\}}{no default}{Name assigned to the point: $A$, $T_a$ ,$P1$ etc ...}
\bottomrule
\end{tabular}
\medskip
The obligatory arguments of this macro are two dimensions expressed with decimals, in the first case they are two measures of length, in the second case they are a measure of length and the measure of an angle in degrees.
\medskip
\begin{tabular}{lll}%
\toprule
options & default & definition \\
\midrule
\TOline{label} {no default} {allows you to place a label at a predefined distance}
\TOline{shift} {no default} {adds $(x,y)$ or $(\alpha:d)$ to all coordinates}
\end{tabular}
\end{NewMacroBox}
\subsubsection{Cartesian coordinates }
\begin{tkzexample}[latex=7cm,small]
\begin{tikzpicture}
\tkzInit[xmax=5,ymax=5]
\tkzDefPoint(0,0){A}
\tkzDefPoint(4,0){B}
\tkzDefPoint(0,3){C}
\tkzDrawPolygon(A,B,C)
\tkzDrawPoints(A,B,C)
\end{tikzpicture}
\end{tkzexample}
\subsubsection{Calculations with \tkzNamePack{xfp}}
\begin{tkzexample}[latex=7cm,small]
\begin{tikzpicture}[scale=1]
\tkzInit[xmax=4,ymax=4]
\tkzGrid
\tkzDefPoint(-1+2,sqrt(4)){O}
\tkzDefPoint({3*ln(exp(1))},{exp(1)}){A}
\tkzDefPoint({4*sin(pi/6)},{4*cos(pi/6)}){B}
\tkzDrawPoints[color=blue](O,B,A)
\end{tikzpicture}
\end{tkzexample}
\subsubsection{Polar coordinates }
\begin{tkzexample}[latex=7cm,small]
\begin{tikzpicture}
\foreach \an [count=\i] in {0,60,...,300}
{ \tkzDefPoint(\an:3){A_\i}}
\tkzDrawPolygon(A_1,A_...,A_6)
\tkzDrawPoints(A_1,A_...,A_6)
\end{tikzpicture}
\end{tkzexample}
\subsubsection{Calculations and coordinates}
You must follow the syntax of \tkzNamePack{xfp} here. It is always possible to go through \tkzNamePack{pgfmath} but in this case, the coordinates must be calculated before using the macro \tkzcname{tkzDefPoint}.
\begin{tkzexample}[latex=6cm,small]
\begin{tikzpicture}[scale=.5]
\foreach \an [count=\i] in {0,2,...,358}
{ \tkzDefPoint(\an:sqrt(sqrt(\an mm))){A_\i}}
\tkzDrawPoints(A_1,A_...,A_180)
\end{tikzpicture}
\end{tkzexample}
\subsubsection{Relative points}
First, we can use the \tkzNameEnv{scope} environment from \TIKZ.
In the following example, we have a way to define an equilateral triangle.
\begin{tkzexample}[latex=7cm,small]
\begin{tikzpicture}[scale=1]
\tkzSetUpLine[color=blue!60]
\begin{scope}[rotate=30]
\tkzDefPoint(2,3){A}
\begin{scope}[shift=(A)]
\tkzDefPoint(90:5){B}
\tkzDefPoint(30:5){C}
\end{scope}
\end{scope}
\tkzDrawPolygon(A,B,C)
\tkzLabelPoints[above](B,C)
\tkzLabelPoints[below](A)
\tkzDrawPoints(A,B,C)
\end{tikzpicture}
\end{tkzexample}
%<--------------------------------------------------------------------------->
\subsection{Point relative to another: \tkzcname{tkzDefShiftPoint}}
\begin{NewMacroBox}{tkzDefShiftPoint}{\oarg{Point}\parg{$x,y$}\marg{name} or \parg{$\alpha$:$d$}\marg{name}}%
\begin{tabular}{lll}%
arguments & default & definition \\
\midrule
\TAline{($x,y$)}{no default}{$x$ and $y$ are two dimensions, by default in cm.}
\TAline{($\alpha$:$d$)}{no default}{$\alpha$ is an angle in degrees, $d$ is a dimension}
\midrule
options & default & definition \\
\midrule
\TOline{[pt]} {no default} {\tkzcname{tkzDefShiftPoint}[A](0:4)\{B\}}
\end{tabular}
\end{NewMacroBox}
\subsubsection{Isosceles triangle with \tkzcname{tkzDefShiftPoint}}
This macro allows you to place one point relative to another. This is equivalent to a translation. Here is how to construct an isosceles triangle with main vertex $A$ and angle at vertex of $30^{\circ} $.
\begin{tkzexample}[latex=7cm,small]
\begin{tikzpicture}[rotate=-30]
\tkzDefPoint(2,3){A}
\tkzDefShiftPoint[A](0:4){B}
\tkzDefShiftPoint[A](30:4){C}
\tkzDrawSegments(A,B B,C C,A)
\tkzMarkSegments[mark=|,color=red](A,B A,C)
\tkzDrawPoints(A,B,C)
\tkzLabelPoints(B,C)
\tkzLabelPoints[above left](A)
\end{tikzpicture}
\end{tkzexample}
\subsubsection{Equilateral triangle}
Let's see how to get an equilateral triangle (there is much simpler)
\begin{tkzexample}[latex=7cm,small]
\begin{tikzpicture}[scale=1]
\tkzDefPoint(2,3){A}
\tkzDefShiftPoint[A](30:3){B}
\tkzDefShiftPoint[A](-30:3){C}
\tkzDrawPolygon(A,B,C)
\tkzDrawPoints(A,B,C)
\tkzLabelPoints(B,C)
\tkzLabelPoints[above left](A)
\tkzMarkSegments[mark=|,color=red](A,B A,C B,C)
\end{tikzpicture}
\end{tkzexample}
\subsubsection{Parallelogram}
There's a simpler way
\begin{tkzexample}[latex=7cm,small]
\begin{tikzpicture}
\tkzDefPoint(0,0){A}
\tkzDefPoint(30:3){B}
\tkzDefShiftPointCoord[B](10:2){C}
\tkzDefShiftPointCoord[A](10:2){D}
\tkzDrawPolygon(A,...,D)
\tkzDrawPoints(A,...,D)
\end{tikzpicture}
\end{tkzexample}
%<--------------------------------------------------------------------------->
\subsection{Definition of multiple points: \tkzcname{tkzDefPoints}}
\begin{NewMacroBox}{tkzDefPoints}{\oarg{local options}\marg{$x_1/y_1/n_1,x_2/y_2/n_2$, ...}}%
$x_i$ and $y_i$ are the coordinates of a referenced point $n_i$
\begin{tabular}{lll}%
\toprule
arguments & default & example \\
\midrule
\TAline{$x_i/y_i/n_i$}{}{\tkzcname{tkzDefPoints\{0/0/O,2/2/A\}}}
\end{tabular}
\medskip
\begin{tabular}{lll}%
options & default & definition \\
\midrule
\TOline{shift} {no default} {Adds $(x,y)$ or $(\alpha:d)$ to all coordinates}
\end{tabular}
\end{NewMacroBox}
\subsection{Create a triangle}
\begin{tkzexample}[latex=6cm,small]
\begin{tikzpicture}[scale=1]
\tkzDefPoints{0/0/A,4/0/B,4/3/C}
\tkzDrawPolygon(A,B,C)
\tkzDrawPoints(A,B,C)
\end{tikzpicture}
\end{tkzexample}
\subsection{Create a square}
Note here the syntax for drawing the polygon.
\begin{tkzexample}[latex=6cm,small]
\begin{tikzpicture}[scale=1]
\tkzDefPoints{0/0/A,2/0/B,2/2/C,0/2/D}
\tkzDrawPolygon(A,...,D)
\tkzDrawPoints(A,B,C,D)
\end{tikzpicture}
\end{tkzexample}
\section{Special points}
The introduction of the dots was done in \tkzname{tkz-base}, the most important macro being \tkzcname{tkzDefPoint}. Here are some special points.
%<--------------------------------------------------------------------------->
\subsection{Middle of a segment \tkzcname{tkzDefMidPoint}}
It is a question of determining the middle of a segment.
\begin{NewMacroBox}{tkzDefMidPoint}{\parg{pt1,pt2}}%
The result is in \tkzname{tkzPointResult}. We can access it with \tkzcname{tkzGetPoint}.
\medskip
\begin{tabular}{lll}%
\toprule
arguments & default & definition \\
\midrule
\TAline{(pt1,pt2)}{no default}{pt1 and pt2 are two points}
\end{tabular}
\end{NewMacroBox}
\subsubsection{Use of \tkzcname{tkzDefMidPoint}}
Review the use of \tkzcname{tkzDefPoint} in \tkzNamePack{tkz-base}.
\begin{tkzexample}[latex=7cm,small]
\begin{tikzpicture}[scale=1]
\tkzDefPoint(2,3){A}
\tkzDefPoint(4,0){B}
\tkzDefMidPoint(A,B) \tkzGetPoint{C}
\tkzDrawSegment(A,B)
\tkzDrawPoints(A,B,C)
\tkzLabelPoints[right](A,B,C)
\end{tikzpicture}
\end{tkzexample}
\subsection{Barycentric coordinates }
$pt_1$, $pt_2$, \dots, $pt_n$ being $n$ points, they define $n$ vectors $\overrightarrow{v_1}$, $\overrightarrow{v_2}$, \dots, $\overrightarrow{v_n}$ with the origin of the referential as the common endpoint. $\alpha_1$, $\alpha_2$,
\dots $\alpha_n$ are $n$ numbers, the vector obtained by:
\begin{align*}
\frac{\alpha_1 \overrightarrow{v_1} + \alpha_2 \overrightarrow{v_2} + \cdots + \alpha_n \overrightarrow{v_n}}{\alpha_1
+ \alpha_2 + \cdots + \alpha_n}
\end{align*}
defines a single point.
\begin{NewMacroBox}{tkzDefBarycentricPoint}{\parg{pt1=$\alpha_1$,pt2=$\alpha_2$,\dots}}%
\begin{tabular}{lll}%
arguments & default & definition \\
\midrule
\TAline{(pt1=$\alpha_1$,pt2=$\alpha_2$,\dots)}{no default}{Each point has a assigned weight}
\bottomrule
\end{tabular}
\medskip
You need at least two points.
\end{NewMacroBox}
\subsubsection{Using \tkzcname{tkzDefBarycentricPoint} with two points}
In the following example, we obtain the barycentre of points $A$ and $B$ with coefficients $1$ and $2$, in other words:
\[
\overrightarrow{AI}= \frac{2}{3}\overrightarrow{AB}
\]
\begin{tkzexample}[latex=7cm,small]
\begin{tikzpicture}
\tkzDefPoint(2,3){A}
\tkzDefShiftPointCoord[2,3](30:4){B}
\tkzDefBarycentricPoint(A=1,B=2)
\tkzGetPoint{I}
\tkzDrawPoints(A,B,I)
\tkzDrawLine(A,B)
\tkzLabelPoints(A,B,I)
\end{tikzpicture}
\end{tkzexample}
\subsubsection{Using \tkzcname{tkzDefBarycentricPoint} with three points}
This time $M$ is simply the centre of gravity of the triangle. For reasons of simplification and homogeneity, there is also \tkzcname{tkzCentroid}.
\begin{tkzexample}[latex=7cm,small]
\begin{tikzpicture}[scale=.8]
\tkzDefPoint(2,1){A}
\tkzDefPoint(5,3){B}
\tkzDefPoint(0,6){C}
\tkzDefBarycentricPoint(A=1,B=1,C=1)
\tkzGetPoint{M}
\tkzDefMidPoint(A,B) \tkzGetPoint{C'}
\tkzDefMidPoint(A,C) \tkzGetPoint{B'}
\tkzDefMidPoint(C,B) \tkzGetPoint{A'}
\tkzDrawPolygon(A,B,C)
\tkzDrawPoints(A',B',C')
\tkzDrawPoints(A,B,C,M)
\tkzDrawLines[add=0 and 1](A,M B,M C,M)
\tkzLabelPoint(M){$M$}
\tkzAutoLabelPoints[center=M](A,B,C)
\tkzAutoLabelPoints[center=M,above right](A',B',C')
\end{tikzpicture}
\end{tkzexample}
\subsection{Internal Similitude Center}
The centres of the two homotheties in which two circles correspond are called external and internal centres of similitude.
\begin{tkzexample}[latex=6cm,small]
\begin{tikzpicture}[scale=.75,rotate=-30]
\tkzDefPoint(0,0){O}
\tkzDefPoint(4,-5){A}
\tkzDefIntSimilitudeCenter(O,3)(A,1)
\tkzGetPoint{I}
\tkzExtSimilitudeCenter(O,3)(A,1)
\tkzGetPoint{J}
\tkzDefTangent[from with R= I](O,3 cm)
\tkzGetPoints{D}{E}
\tkzDefTangent[from with R= I](A,1 cm)
\tkzGetPoints{D'}{E'}
\tkzDefTangent[from with R= J](O,3 cm)
\tkzGetPoints{F}{G}
\tkzDefTangent[from with R= J](A,1 cm)
\tkzGetPoints{F'}{G'}
\tkzDrawCircle[R,fill=red!50,opacity=.3](O,3 cm)
\tkzDrawCircle[R,fill=blue!50,opacity=.3](A,1 cm)
\tkzDrawSegments[add = .5 and .5,color=red](D,D' E,E')
\tkzDrawSegments[add= 0 and 0.25,color=blue](J,F J,G)
\tkzDrawPoints(O,A,I,J,D,E,F,G,D',E',F',G')
\tkzLabelPoints[font=\scriptsize](O,A,I,J,D,E,F,G,D',E',F',G')
\end{tikzpicture}
\end{tkzexample}
\endinput
|