Doc: Début de la documentation de la commande \meshAddPointBW
[delaunay.git] / doc / luamesh-doc.tex
1 % luamesh: compute and draw meshes with lua, luamplib and tikz
2 %
3 % Originally written by Maxime Chupin <mc@melusine.eu.org>,
4 % 2010.
5 %
6 % Distributed under the terms of the GNU free documentation licence:
7 % http://www.gnu.org/licenses/fdl.html
8 % without any invariant section or cover text.
9
10 \documentclass{lltxdoc}
11 \usepackage{tcolorbox}
12 \usepackage{xargs}
13 \usepackage{enumitem}
14 \usepackage[tikz]{bclogo}
15 \usepackage{wrapfig}
16 \title{\Verb+luamesh+: compute and draw meshes with \lualatex}
17 \author{Maxime Chupin \email{mc@melusine.eu.org}}
18 \date{\today}
19
20 \newcommand*\commande{\noindent\hspace{-30pt}%
21 \SaveVerb[aftersave={%
22 \UseVerb{Vitem}
23 }%
24 ]{Vitem}}
25
26 \newcommand*\textme[1]{\textcolor{black}{\rmfamily\textit{#1}}}
27 \newcommand*\meta[1]{% % meta
28 \textme{\ensuremath{\langle}#1\ensuremath{\rangle}}}
29 \newcommand*\optstar{% % optional star
30 \meta{\ensuremath{*}}\xspace}
31 \DefineShortVerb{\|}
32
33 \setlength{\fboxsep}{2pt}
34 \fvset{%
35 codes={\catcode`\«\active \catcode`\×\active },
36 defineactive={\makefancyog\makefancytimes},
37 formatcom=\color{red},
38 frame=single
39 }
40 % rendre «...» équivalent à \meta{...}
41 {\catcode`\«\active
42 \newcommandx\makefancyog[0][addprefix=\global]{%
43 \def«##1»{\meta{##1}}}}
44 % rendre × équivalent à \optstar
45 {\catcode`\×\active
46 \newcommandx\makefancytimes[0][addprefix=\global]{%
47 \def×{\optstar{}}}}
48
49
50 \tcbuselibrary{listings,breakable}
51
52 \definecolor{vert}{rgb}{0.1,0.4,0.1}
53 \definecolor{bleu}{rgb}{0.1,0.1,0.4}
54 \lstset{
55 numberstyle=\footnotesize\color{vert},
56 keywordstyle=\ttfamily\bfseries\color{blue},
57 basicstyle=\ttfamily\footnotesize,
58 commentstyle=\itshape\color{vert},
59 stringstyle=\ttfamily,
60 showstringspaces=false,
61 language=[LaTeX]TeX,
62 breaklines=true,
63 breakindent=30pt,
64 defaultdialect=[LaTeX]TeX,
65 morekeywords={buildMeshBW,buildMeshBWinc,drawPointsMesh,
66 drawPointsMeshinc, meshAddPointBW, meshAddPointBWinc}% frame=tb
67 }
68
69 \lstdefinelanguage{lua}
70 {morekeywords={for,end,function,do,if,else,elseif,then,
71 tex.print,tex.sprint,io.read,io.open,string.find,string.explode,require},
72 morecomment=[l]{--},
73 morecomment=[s]{--[[}{]]},
74 morestring=[b]''
75 }
76
77 \newtcblisting{Exemple}{%
78 arc=0pt,outer arc=0pt,
79 colback=red!2!white,
80 colframe=red!75!black,
81 breakable,
82 boxsep=0pt,left=5pt,right=5pt,top=5pt,bottom=5pt, bottomtitle =
83 3pt, toptitle=3pt,
84 boxrule=0pt,bottomrule=0.5pt,toprule=0.5pt, toprule at break =
85 0pt, bottomrule at break = 0pt,
86 listing options={breaklines},
87 }
88
89 \newtcblisting{commandshell}{colback=black,colupper=white,colframe=black,
90 arc=0pt,
91 listing only,boxsep=0pt,listing
92 options={style=tcblatex,language=sh},
93 every listing line={\textcolor{red}{\small\ttfamily\bfseries user \$> }}}
94
95 \newtcblisting{latexcode}{
96 arc=0pt,outer arc=0pt,
97 colback=red!2!white,
98 colframe=red!75!black,
99 breakable,
100 boxsep=0pt,left=5pt,right=5pt,top=5pt,bottom=5pt, bottomtitle =
101 3pt, toptitle=3pt,
102 boxrule=0pt,bottomrule=0.5pt,toprule=0.5pt, toprule at break =
103 0pt, bottomrule at break = 0pt,
104 listing only,boxsep=0pt,listing
105 options={breaklines}
106 }
107
108
109 \newcommand\luamesh{\Verb+luamesh+\xspace}
110
111 \newenvironment{optionsenum}[1][]
112 {\begin{description}[font=\color{red}\ttfamily]}
113 {\end{description}}
114
115 \newenvironment{warning}{%
116 \setlength{\logowidth}{24pt}
117 \tcbset{%
118 arc=0pt,outer arc=0pt,colback=gray!10!white,colframe=gray!60!white,
119 boxsep=0pt,left=5pt,right=5pt,top=5pt,bottom=5pt, bottomtitle = 3pt, toptitle=3pt,
120 boxrule=0pt,bottomrule=0.5pt,toprule=0.5pt}
121 \medskip
122 \begin{tcolorbox}%
123 \begin{wrapfigure}[2]{L}{17pt}%
124 % \raisebox{-5pt}{
125 \vspace*{-0.55cm}
126 \bcinfo
127 % }%
128 \end{wrapfigure}
129 }%
130 {\end{tcolorbox}\medskip}
131
132
133
134 \begin{document}
135 %% === Page de garde ===================================================
136 \thispagestyle{empty}
137 \begin{tikzpicture}[remember picture, overlay]
138 \node[below right, shift={(-4pt,4pt)}] at (current page.north west) {%
139 \includegraphics{fond.pdf}%
140 };
141 \end{tikzpicture}%
142
143 \noindent
144 \includegraphics{luamesh}\\
145 {\large compute and draw meshes with \lualatex}\\[1cm]
146 \parbox{0.6\textwidth}{
147 \meshAddPointBW[
148 mode=ext,step=badtriangles,
149 colorNew =green!20!red,
150 colorBack=red!10,
151 colorCircle = blue,
152 bbox = show,
153 colorBbox = black!30
154 ]
155 {meshgarde.txt}{7}
156 }\hfill
157 \parbox{0.4\textwidth}{\Large\raggedleft
158 \textbf{Contributor}\\
159 Maxime \textsc{Chupin}
160 }
161 \vfill
162 \begin{center}
163 Version 0.1, 25 novembre 2016\\
164 \url{http://melusine.eu.org/syracuse/G/delaunay/}
165 \end{center}
166 %% == Page de garde ====================================================
167 \newpage
168
169 \maketitle
170
171 \begin{abstract}
172 The package \Verb|luamesh| allows to compute and draw 2D triangulation
173 of Delaunay. The algorithm is written with lua, and depending of the
174 choice of the ``engine'', the draw is done by MetaPost (with
175 \Verb|luamplib|) or by \Verb|tikz|.
176
177 The Delaunay triangulation algorithm is the Bowyer and Watson
178 algorithm. Several macros are provided to draw the global mesh, the
179 set of points, a particular step of the algorithm.
180 \end{abstract}
181
182 I would like to thank Jean-Michel Sarlat, who hosts the development
183 with a git project on the \Verb+melusine+ machine:
184 \begin{center}
185 \url{https://melusine.eu.org/syracuse/G/delaunay/}
186 \end{center}
187 Then, I would like to thank the first user, and an intensive
188 \emph{test} user: Nicole Spillane.
189
190 \section{Installation}
191
192
193 Of course, you can just put the two files \Verb+luamesh.lua+ and
194 \Verb+luamesh.sty+ in the working directory, but it is not
195 recommended.
196
197
198 \subsection{With \TeX live and Linux or Mac OSX}
199
200 To install \luamesh with \TeX live, you have to create the local
201 \Verb+texmf+ directory in your \Verb+home+.
202
203 \begin{commandshell}
204 mkdir ~/texmf
205 \end{commandshell}
206
207 Then we have to files to place in the correct directories. First, the
208 \Verb+luamesh.sty+ file must be in the directory:
209 \begin{center}
210 \Verb+~/texmf/tex/latex/luamesh/+
211 \end{center}
212 and secondly, the \Verb+luamesh.lua+ must be in the directory:
213 \begin{center}
214 \Verb+~/texmf/scripts/luamesh/+
215 \end{center}
216
217 Once you have done this, \luamesh can be included in your document
218 with
219 \begin{latexcode}
220 \usepackage{luamesh}
221 \end{latexcode}
222
223 \subsection{With Mik\TeX{} and Windows}
224
225 We do not know these two systems, so we refer to the
226 documentation for integrating local additions to Mik\TeX:
227 \begin{center}
228 \url{http://docs.miktex.org/manual/localadditions.html}
229 \end{center}
230
231
232 \subsection{A \lualatex package}
233
234 If you want to use this package, you must compile your document with
235 \Verb+lualatex+:
236
237 \begin{commandshell}
238 lualatex mylatexfile.tex
239 \end{commandshell}
240
241
242 \subsection{Dependencies}
243
244 This package is built upon two main packages to draw the
245 triangulations :
246 \begin{enumerate}
247 \item \Verb+luamplib+ to use MetaPost via the \luatex library
248 \Verb+mplib+;
249 \item and \Verb+tikz+.
250 \end{enumerate}
251 We will see how to choose between these two \emph{drawing engines}.
252
253 Moreover, the following packages are necessary:
254 \begin{enumerate}
255 \item \Verb+xkeyval+ to manage the optional arguments;
256 \item \Verb+xcolor+ to use colors (needed by \Verb+luamplib+);
257 \item \Verb+ifthen+ to help the programming with \TeX.
258 \end{enumerate}
259
260
261 \section{The Basic Macros}
262
263 Let us recall that this package provides macros to draw two
264 dimensional triangulations (or meshes).
265
266 \subsection{Draw a Complete Mesh}\label{sec:buildMesh}
267
268 \commande|\buildMeshBW[«options»]{«list of points» or «file name»}|\medskip
269
270 This macro produce the Delaunay triangulation (using the Bowyer and
271 Watson algorithm) of the given \meta{list of points}. The list of
272 points must be given in the following way :
273 \begin{center}
274 \verb+(x1,y1);(x2,y2);(x3,y3);...;(xn,yn)+
275 \end{center}
276
277 \begin{Exemple}
278 \buildMeshBW{(0.3,0.3);(1.5,1);(4,0);(4.5,2.5);(1.81,2.14);(2.5,0.5);(2.8,1.5)}
279 \end{Exemple}
280
281 \subsubsection{The Options}
282
283 There are several options to customize the drawing.
284 \begin{optionsenum}
285 \item[mode = int (default) or ext:] this option allows to
286 use either the previously described set of point in the argument, or
287 a file, containing, line by line (2 columns), the points. Such a
288 file looks like :
289 \begin{verbatim}
290 x1 y1
291 x2 y2
292 x3 y3
293 ...
294 xn yn
295 \end{verbatim}
296 \item[bbox = none (default) or show:] this option allows to draw the
297 added points to form a \emph{bounding box}\footnote{The bounding
298 box is defined by four points place at 15\% around the box
299 defined by $(x_{\min},y_{\min})$, $(x_{\min},y_{\max})$,
300 $(x_{\max},y_{\max})$, and $(x_{\min},y_{\max})$.} and the corresponding
301 triangulation. By default, these triangles are removed at the end of
302 the algorithm.
303 \item[color = \meta{value} (default: black):] The color of the
304 drawing.
305 \item[colorBbox = \meta{value} (default: black):] The color of the
306 drawing for the elements (points and triangles) belonging to the
307 bounding box.
308 \item[print = none (default) or points:] To label the vertices of the
309 triangulations with an adding dot.
310 \item[meshpoint = \meta{value} (default: P):] The letter(s) used to
311 label the vertices of the triangulation. It is include in the math
312 mode delimiters \Verb+$...$+. The bounding box points are labeled
313 with a star exponent, and numbered from 1 to 4.
314 \item[tikz (boolean, default:false):] By default, this boolean is set
315 to \Verb+false+, and MetaPost (with \Verb+luamplib+) is used to draw
316 the picture. With this option, it is \Verb+tikz+ the \textit{drawing
317 engine}.
318 \item[scale = \meta{value} (default: 1cm):] The scale option defines
319 the scale at which the picture is draw (the same for the two
320 axis). It must contain the unit of length (cm,
321 pt, etc.).
322 \end{optionsenum}
323
324 To illustrate the options, let us show you an example. We consider a
325 file \Verb+mesh.txt+:
326 \begin{verbatim}
327 0.3 0.3
328 1.5 1
329 4 0
330 4.5 2.5
331 1.81 2.14
332 2.5 0.5
333 2.8 1.5
334 \end{verbatim}
335 \begin{Exemple}
336 \buildMeshBW[%
337 tikz,
338 mode = ext,
339 bbox = show,
340 color = red,
341 colorBbox = blue!30,
342 print = points,
343 meshpoint = x,
344 scale = 1.3cm,
345 ]{mesh.txt}
346 \end{Exemple}
347
348 \begin{warning}
349 The drawing engine is not here very relevant. But it is useful to
350 understand how the drawing is made. However, the engine will make sens
351 for the so called \emph{inc} macros (section~\ref{sec:inc}), where we
352 will be allowed to add code before and after the generated one by
353 \luamesh.
354 \end{warning}
355
356 \subsection{Draw the Set of Points}
357
358 \commande|\drawPointsMesh[«options»]{«list of points» or «file name»}|\medskip
359
360 With the \Verb+\drawPointsMesh+, we plot the set of the points from
361 which the Browyer and Watson algorithm compute the triangulation.
362
363 The use of this macro is quite similar to the
364 \Verb+\buildMeshBW+. Here is an example of the basic uses.
365 \begin{Exemple}
366 \drawPointsMesh{(0.3,0.3);(1.5,1);(4,0);(4.5,2.5);(1.81,2.14);(2.5,0.5);(2.8,1.5)}
367 \end{Exemple}
368
369
370 \subsubsection{The Options}
371
372 There are several options (exactly the same that for the
373 \Verb+\buildMeshBW+)to customize the drawing.
374 \begin{optionsenum}
375 \item[mode = int (default) or ext:] this option allows to
376 use either the previously described set of point in the argument, or
377 a file, containing, line by line (2 columns), the points. Such a
378 file looks like :
379 \begin{verbatim}
380 x1 y1
381 x2 y2
382 x3 y3
383 ...
384 xn yn
385 \end{verbatim}
386 \item[bbox = none (default) or show:] this option allows to draw the
387 added points to form a \emph{bounding box} and the corresponding
388 triangulation. By default, these triangles are removed at the end of
389 the algorithm. \emph{Here, because we plot only the vertices of the
390 mesh, there is no triangles, but only dots.}
391 \item[color = \meta{value} (default: black):] The color of the
392 drawing.
393 \item[colorBbox = \meta{value} (default: black):] The color of the
394 drawing for the elements (points and triangles) belonging to the
395 bounding box.
396 \item[print = none (default) or points:] To label the vertices of the
397 triangulations with an adding dot. Without label, there is a dot.
398 \item[meshpoint = \meta{value} (default: P):] The letter(s) used to
399 label the vertices of the triangulation. It is include in the math
400 mode delimiters \Verb+$...$+. The bounding box points are labeled
401 with a star exponent, and numbered from 1 to 4.
402 \item[tikz (boolean, default:false):] By default, this boolean is set
403 to \Verb+false+, and MetaPost (with \Verb+luamplib+) is used to draw
404 the picture. With this option, it is \Verb+tikz+ the \textit{drawing
405 engine}.
406 \item[scale = \meta{value} (default: 1cm):] The scale option defines
407 the scale at which the picture is draw (the same for the two
408 axis). It must contain the unit of length (cm,
409 pt, etc.).
410 \end{optionsenum}
411 With the same external mesh point file presented in
412 section~\ref{sec:buildMesh}, we illustrate the different options.
413
414 \begin{Exemple}
415 \drawPointsMesh[%
416 tikz,
417 mode = ext,
418 bbox = show,
419 color = blue,
420 colorBbox = red,
421 print = points,
422 meshpoint = y,
423 scale = 1.3cm,
424 ]{mesh.txt}
425 \end{Exemple}
426
427
428 \subsection{Draw a Step of the Bowyer and Watson Algorithm}
429
430 \commande|\meshAddPointBW[«options»]{«list of points» or «file name»}{«point» or «number of line»}|\medskip
431
432 This command allows to plot the different step of the addition of a
433 point in a Delaunay triangulation, using the Bowyer and Watson
434 algorithm.
435
436 This macro produce the Delaunay triangulation (using the Bowyer and
437 Watson algorithm) of the given \meta{list of points} and shows a step
438 of the algorithm when the \meta{point} is added. The list of
439 points must be given in the following way:
440 \begin{center}
441 \verb+(x1,y1);(x2,y2);(x3,y3);...;(xn,yn)+
442 \end{center}
443 and the point is of the form \verb+(x,y)+. The \meta{file name}
444 and \meta{number of line} will be explained in the option
445 description.
446
447 One can use the macro as fallow:
448 \begin{Exemple}
449 \meshAddPointBW[step=badtriangles]{(1.5,1);(4,0);(4.5,2.5);(1.81,2.14);(2.5,0.5);(2.8,1.5)}{(2.2,1.8)}
450 \meshAddPointBW[step=cavity]{(1.5,1);(4,0);(4.5,2.5);(1.81,2.14);(2.5,0.5);(2.8,1.5)}{(2.2,1.8)}
451 \meshAddPointBW[step=newtriangles]{(1.5,1);(4,0);(4.5,2.5);(1.81,2.14);(2.5,0.5);(2.8,1.5)}{(2.2,1.8)}
452 \end{Exemple}
453 The default value for \Verb+step+ is \Verb+badtriangles+. The first
454 line is then equivalent to
455 \begin{latexcode}
456 \meshAddPointBW{(1.5,1);(4,0);(4.5,2.5);(1.81,2.14);(2.5,0.5);(2.8,1.5)}{(2.2,1.8)}
457 \end{latexcode}
458
459 \section{The \emph{inc} Macros}\label{sec:inc}
460
461 \section{Gallery of Examples}
462
463 \end{document}
464
465
466
467 %%% Local Variables:
468 %%% flyspell-mode: 1
469 %%% ispell-local-dictionary: "american"
470 %%% End:

Licence Creative Commons Les fichiers de Syracuse sont mis à disposition (sauf mention contraire) selon les termes de la
Licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 4.0 International.