X-Git-Url: https://melusine.eu.org/syracuse/G/git/?p=delaunay.git;a=blobdiff_plain;f=doc%2Fluamesh-doc.tex;h=80469eb7bedb79cce110f2f480f440c8868771d4;hp=5a7b9d2d1f2d544e18070280270de0f58986e949;hb=9a7fa0ea882050fc752a0c53137d38209664a4e7;hpb=c2c638a77262e706a6d6b16bf003e3c4354dfda8 diff --git a/doc/luamesh-doc.tex b/doc/luamesh-doc.tex index 5a7b9d2..80469eb 100644 --- a/doc/luamesh-doc.tex +++ b/doc/luamesh-doc.tex @@ -9,14 +9,19 @@ \documentclass{lltxdoc} \usepackage{tcolorbox} -\usepackage{xargs} \usepackage{enumitem} \usepackage[tikz]{bclogo} \usepackage{wrapfig} + + \title{\Verb+luamesh+: compute and draw meshes with \lualatex} \author{Maxime Chupin \email{mc@melusine.eu.org}} \date{\today} + +\definecolor{darkred}{rgb}{0.8,0.1,0.1} + + \newcommand*\commande{\noindent\hspace{-30pt}% \SaveVerb[aftersave={% \UseVerb{Vitem} @@ -34,7 +39,7 @@ \fvset{% codes={\catcode`\«\active \catcode`\×\active }, defineactive={\makefancyog\makefancytimes}, - formatcom=\color{red}, + formatcom=\color{darkred}, frame=single } % rendre «...» équivalent à \meta{...} @@ -109,7 +114,7 @@ \newcommand\luamesh{\Verb+luamesh+\xspace} \newenvironment{optionsenum}[1][] -{\begin{description}[font=\color{red}\ttfamily]} +{\begin{description}[font=\color{darkred}\ttfamily]} {\end{description}} \newenvironment{warning}{% @@ -129,8 +134,9 @@ }% {\end{tcolorbox}\medskip} - - +\lstset{moredelim=*[s][\color{red}\rmfamily\itshape]{<}{>}} +\lstset{moredelim=*[s][\color{blue}\rmfamily\itshape]{<<}{>>}} +\usepackage[colorlinks=true]{hyperref} \begin{document} %% === Page de garde =================================================== \thispagestyle{empty} @@ -141,7 +147,7 @@ \end{tikzpicture}% \noindent -\includegraphics{luamesh}\\ +\includegraphics{luamesh-title}\\ {\large compute and draw meshes with \lualatex}\\[1cm] \parbox{0.6\textwidth}{ \meshAddPointBW[ @@ -169,14 +175,14 @@ \maketitle \begin{abstract} - The package \Verb|luamesh| allows to compute and draw 2D triangulation - of Delaunay. The algorithm is written with lua, and depending of the - choice of the ``engine'', the draw is done by MetaPost (with + The package \Verb|luamesh| allows to compute and draw 2D Delaunay + triangulation. The algorithm is written with lua, and depending on the + choice of the ``engine'', the drawing is done by MetaPost (with \Verb|luamplib|) or by \Verb|tikz|. The Delaunay triangulation algorithm is the Bowyer and Watson algorithm. Several macros are provided to draw the global mesh, the - set of points, a particular step of the algorithm. + set of points, or a particular step of the algorithm. \end{abstract} I would like to thank Jean-Michel Sarlat, who hosts the development @@ -184,14 +190,16 @@ with a git project on the \Verb+melusine+ machine: \begin{center} \url{https://melusine.eu.org/syracuse/G/delaunay/} \end{center} -Then, I would like to thank the first user, and an intensive -\emph{test} user: Nicole Spillane. +I would also like to thank the first user, an intensive +\emph{test} user, and a very kind English corrector: Nicole Spillane. + +\tableofcontents \section{Installation} Of course, you can just put the two files \Verb+luamesh.lua+ and -\Verb+luamesh.sty+ in the working directory, but it is not +\Verb+luamesh.sty+ in the working directory, but this is not recommended. @@ -204,7 +212,7 @@ To install \luamesh with \TeX live, you have to create the local mkdir ~/texmf \end{commandshell} -Then we have to files to place in the correct directories. First, the +Then place the files in the correct directories. First, the \Verb+luamesh.sty+ file must be in the directory: \begin{center} \Verb+~/texmf/tex/latex/luamesh/+ @@ -241,7 +249,7 @@ If you want to use this package, you must compile your document with \subsection{Dependencies} -This package is built upon two main packages to draw the +This package is built upon two main existing packages to draw the triangulations : \begin{enumerate} \item \Verb+luamplib+ to use MetaPost via the \luatex library @@ -267,7 +275,7 @@ dimensional triangulations (or meshes). \commande|\buildMeshBW[«options»]{«list of points» or «file name»}|\medskip -This macro produce the Delaunay triangulation (using the Bowyer and +This macro produces the Delaunay triangulation (using the Bowyer and Watson algorithm) of the given \meta{list of points}. The list of points must be given in the following way : \begin{center} @@ -282,8 +290,8 @@ points must be given in the following way : There are several options to customize the drawing. \begin{optionsenum} -\item[mode = int (default) or ext:] this option allows to - use either the previously described set of point in the argument, or +\item[mode = int (default) \textme{or} ext:] this option allows to + use either the previously described set of points in the argument, or a file, containing, line by line (2 columns), the points. Such a file looks like : \begin{verbatim} @@ -293,11 +301,12 @@ x3 y3 ... xn yn \end{verbatim} -\item[bbox = none (default) or show:] this option allows to draw the +\item[bbox = none (default) \textme{or} show:] this option allows to draw the added points to form a \emph{bounding box}\footnote{The bounding box is defined by four points place at 15\% around the box defined by $(x_{\min},y_{\min})$, $(x_{\min},y_{\max})$, - $(x_{\max},y_{\max})$, and $(x_{\min},y_{\max})$.} and the corresponding + $(x_{\max},y_{\max})$, and $(x_{\min},y_{\max})$. It is used by + the algorithm and will be computed in any case.} and the corresponding triangulation. By default, these triangles are removed at the end of the algorithm. \item[color = \meta{value} (default: black):] The color of the @@ -305,19 +314,19 @@ xn yn \item[colorBbox = \meta{value} (default: black):] The color of the drawing for the elements (points and triangles) belonging to the bounding box. -\item[print = none (default) or points:] To label the vertices of the - triangulations with an adding dot. +\item[print = none (default) \textme{or} points:] To label the vertices of the + triangulation. This also adds a \emph{dot} at each vertex. \item[meshpoint = \meta{value} (default: P):] The letter(s) used to - label the vertices of the triangulation. It is include in the math + label the vertices of the triangulation. It is included in the math mode delimiters \Verb+$...$+. The bounding box points are labeled - with a star exponent, and numbered from 1 to 4. + with numbers 1 to 4 and with a star exponent. \item[tikz (boolean, default:false):] By default, this boolean is set to \Verb+false+, and MetaPost (with \Verb+luamplib+) is used to draw - the picture. With this option, it is \Verb+tikz+ the \textit{drawing + the picture. With this option, \Verb+tikz+ becomes the \textit{drawing engine}. \item[scale = \meta{value} (default: 1cm):] The scale option defines - the scale at which the picture is draw (the same for the two - axis). It must contain the unit of length (cm, + the scale at which the picture is drawn (the same for both + axes). It must contain the unit of length (cm, pt, etc.). \end{optionsenum} @@ -346,10 +355,11 @@ file \Verb+mesh.txt+: \end{Exemple} \begin{warning} -The drawing engine is not here very relevant. But it is useful to -understand how the drawing is made. However, the engine will make sens -for the so called \emph{inc} macros (section~\ref{sec:inc}), where we -will be allowed to add code before and after the generated one by +The drawing engine is not very relevant here, but it is useful to +understand how the drawing is made. However, the engine will be +relevant to +the so called \emph{inc} macros (section~\ref{sec:inc}), for adding +code before and after the one generated by \luamesh. \end{warning} @@ -357,10 +367,10 @@ will be allowed to add code before and after the generated one by \commande|\drawPointsMesh[«options»]{«list of points» or «file name»}|\medskip -With the \Verb+\drawPointsMesh+, we plot the set of the points from -which the Browyer and Watson algorithm compute the triangulation. +With the \Verb+\drawPointsMesh+, we plot the set of (user chosen) points from +which the Bowyer and Watson algorithm computes the triangulation. -The use of this macro is quite similar to the +The use of this macro is quite similar to \Verb+\buildMeshBW+. Here is an example of the basic uses. \begin{Exemple} \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)} @@ -369,11 +379,11 @@ The use of this macro is quite similar to the \subsubsection{The Options} -There are several options (exactly the same that for the -\Verb+\buildMeshBW+)to customize the drawing. +There are several options (exactly the same as for the +\Verb+\buildMeshBW+) to customize the drawing. \begin{optionsenum} -\item[mode = int (default) or ext:] this option allows to - use either the previously described set of point in the argument, or +\item[mode = int (default) \textme{or} ext:] this option allows to + use either the previously described set of points as the argument, or a file, containing, line by line (2 columns), the points. Such a file looks like : \begin{verbatim} @@ -383,29 +393,30 @@ x3 y3 ... xn yn \end{verbatim} -\item[bbox = none (default) or show:] this option allows to draw the +\item[bbox = none (default) \textme{or} show:] this option allows to draw the added points to form a \emph{bounding box} and the corresponding triangulation. By default, these triangles are removed at the end of the algorithm. \emph{Here, because we plot only the vertices of the - mesh, there is no triangles, but only dots.} + mesh, there are no triangles, only dots.} \item[color = \meta{value} (default: black):] The color of the drawing. \item[colorBbox = \meta{value} (default: black):] The color of the drawing for the elements (points and triangles) belonging to the bounding box. -\item[print = none (default) or points:] To label the vertices of the - triangulations with an adding dot. Without label, there is a dot. +\item[print = none (default) \textme{or} points:] To label the vertices of the + triangulation. This also adds a \emph{dot} at each vertex. Without + label, there is still the dot. \item[meshpoint = \meta{value} (default: P):] The letter(s) used to - label the vertices of the triangulation. It is include in the math + label the vertices of the triangulation. It is included in the math mode delimiters \Verb+$...$+. The bounding box points are labeled - with a star exponent, and numbered from 1 to 4. + with numbers 1 to 4 and with a star exponent. \item[tikz (boolean, default:false):] By default, this boolean is set to \Verb+false+, and MetaPost (with \Verb+luamplib+) is used to draw - the picture. With this option, it is \Verb+tikz+ the \textit{drawing + the picture. With this option, \Verb+tikz+ becomes the \textit{drawing engine}. \item[scale = \meta{value} (default: 1cm):] The scale option defines - the scale at which the picture is draw (the same for the two - axis). It must contain the unit of length (cm, + the scale at which the picture is drawn (the same for both + axes). It must contain the unit of length (cm, pt, etc.). \end{optionsenum} With the same external mesh point file presented in @@ -429,11 +440,11 @@ section~\ref{sec:buildMesh}, we illustrate the different options. \commande|\meshAddPointBW[«options»]{«list of points» or «file name»}{«point» or «number of line»}|\medskip -This command allows to plot the different step of the addition of a -point in a Delaunay triangulation, using the Bowyer and Watson +This command allows to plot the steps within the addition of a +point in a Delaunay triangulation, by the Bowyer and Watson algorithm. -This macro produce the Delaunay triangulation (using the Bowyer and +This macro produces the Delaunay triangulation (using the Bowyer and Watson algorithm) of the given \meta{list of points} and shows a step of the algorithm when the \meta{point} is added. The list of points must be given in the following way: @@ -444,21 +455,309 @@ and the point is of the form \verb+(x,y)+. The \meta{file name} and \meta{number of line} will be explained in the option description. -One can use the macro as fallow: +One can use the macro as fallows: \begin{Exemple} \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)} \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)} \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)} \end{Exemple} -The default value for \Verb+step+ is \Verb+badtriangles+. The first -line is then equivalent to +The default value for \Verb+step+ is +\Verb+badtriangles+. Consequently, the first +line is equivalent to \begin{latexcode} \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)} \end{latexcode} +\subsubsection{The Options} + +There are several options (some of them are the same as for +\Verb+\buildMeshBW+) to customize the drawing. +\begin{optionsenum} +\item[mode = int (default) \textme{or} ext:] this option allows to + use either the previously described set of point in the first + argument, or + a file containing, line by line (2 columns), the points. Such a + file looks like : +\begin{verbatim} +x1 y1 +x2 y2 +x3 y3 +... +xn yn +\end{verbatim} +For the second argument of the macro, if we are in the +\Verb+mode = ext+, the argument must be the \emph{line number} of the file +corresponding to the point we want to add. The algorithm will stop the +line before to build the initial triangulation for which it will add +the point corresponding to the line. The subsequent lines in the file are +ignored. +\item[bbox = none (default) \textme{or} show:] this option allows to draw the + added points to form a \emph{bounding box} and the corresponding + triangulation. By default, these triangles are removed at the end of + the algorithm. +\item[color = \meta{value} (default: black):] The color of the + drawing. +\item[colorBbox = \meta{value} (default: black):] The color of the + drawing for the elements (points and triangles) belonging to the + bounding box. +\item[colorNew = \meta{value} (default: red):] The color of the + drawing of the ``new'' elements which are the point to add, the + polygon of the cavity, and the new triangles. +\item[colorBack = \meta{value} (default: black!20):] The color for the + filling of the region concerned by the addition of the new point. +\item[colorCircle = \meta{value} (default: green):] The color for + the circumcircle of the triangles containing the point to add. +\item[meshpoint = \meta{value} (default: P):] The letter(s) used to + label the vertices of the triangulation. It is included in the math + mode delimiters \Verb+$...$+. The bounding box points are labeled + with numbers 1 to 4 and with a star exponent. +\item[step = badtriangles (default) \textme{or} cavity \textme{or} + newtriangles:] To choose the step we want to draw, corresponding to + the steps of the Bowyer and Watson algorithm. +\item[newpoint = \meta{value} (default: P):] The letter(s) used to + label the new point of the triangulation. It is include in the math + mode delimiters \Verb+$...$+. +\item[tikz (boolean, default:false):] By default, this boolean is set + to \Verb+false+, and MetaPost (with \Verb+luamplib+) is used to draw + the picture. With this option, \Verb+tikz+ is the \textit{drawing + engine}. +\item[scale = \meta{value} (default: 1cm):] The scale option defines + the scale at which the picture is draw (the same for the two + axis). It must contain the unit of length (cm, + pt, etc.). +\end{optionsenum} + +Here is an example of customizing the drawing. First, recall that +the external file \Verb+mesh.txt+ is: +\begin{verbatim} +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 +\end{verbatim} +We draw the addition of the 6th point. The 7th line will be ignored. +\begin{Exemple} + \meshAddPointBW[ + tikz, + mode = ext, + color = blue!70, + meshpoint = \alpha, + newpoint = y, + colorBack=red!10, + colorNew = green!50!red, + colorCircle = blue, + colorBbox = black!20, + bbox = show, + scale=1.4cm, + step=badtriangles] + {mesh.txt}{6} +\end{Exemple} + \section{The \emph{inc} Macros}\label{sec:inc} -\section{Gallery of Examples} +The three macros presented in the above sections have complementary +macros, with the suffix \Verb+inc+ that allow the user to add code +(MetaPost or \Verb+tikz+, depending of the drawing engine) before and +after the code generated by \luamesh. + +The three macros are:\medskip + + +\commande|\buildMeshBWinc[«options»]{«list of points» or «file name»}{«code before»}{«code after»}|\medskip + +\commande|\drawPointsMeshinc[«options»]{«list of points» or «file name»}{«code before»}{«code after»}|\medskip + +\commande|\meshAddPointBWinc[«options»]{«list of points» or «file name»}%| + +\commande| {«point» or «number of line»}{«code before»}{«code after»}|\medskip + +\subsection{With MetaPost} + +We consider the case where the drawing engine is MetaPost (through the +\Verb+luamplib+ package). + +We describe the feature taking one macro in example but the mechanism +and the possibilities are exactly the same for all the macros. + +When we use the MetaPost drawing engine, the macros previously +described produced a code of the form +\begin{latexcode} +\begin{luamplib} + u:=; + beginfig(0); + + endfig; +\end{luamplib} +\end{latexcode} + +Then, the arguments \meta{code before} and \meta{code after} are +inserted as follows: +\begin{latexcode} +\begin{luamplib} + u:=; + <> + + <> +\end{luamplib} +\end{latexcode} +\begin{warning} +With the \emph{inc} macros, the user has to add the \Verb+beginfig();+ +and \Verb+endfig;+ commands to produce a picture. Indeed, this allows +to use the \Verb+\everymplib+ command from the \Verb+\luamplib+ package. +\end{warning} + +\subsubsection{The \LaTeX{} Colors Inside the MetaPost Code} + +The configurable colors +of the \LaTeX{} macro are accessible inside the MetaPost code. For +\Verb+\buildMeshBWinc+ and \Verb+\drawPointsMeshinc+, we have +\Verb+\luameshmpcolor+, +and \Verb+\luameshmpcolorBbox+. +For the macro \Verb+\meshAddPointBWinc+ we have three additional +colors : \Verb+\luameshmpcolorBack+, \Verb+\luameshmpcolorNew+, and +\Verb+\luameshmpcolorCircle+. Of course, we can define MetoPost +colors as well. Finally, the \Verb+luamplib+ mechanism of +\Verb+\mpcolor+ is also available. + +\subsubsection{The Mesh Points} + +At the beginning of the automatically generated code, a list of +MetaPost \Verb+pair+s are defined corresponding to all the vertices of +the mesh (when the option \Verb+bbox=show+, the last 4 points are the +\emph{bounding box points}). The points are available with the +\Verb+MeshPoints[]+ table of variables. The \Verb+MeshPoints[i]+ are +defined using the unit length \Verb+u+. + +\subsubsection{Examples} + +Here is three examples for the different macros. +\begin{Exemple} +\drawPointsMeshinc[ +color = blue!50, +print = points, +meshpoint = x, +scale=0.8cm, +]{(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)}% +{% code before + beginfig(0); +}% +{% code after + label(btex Mesh $\mathbb{T}$ etex, (0,2u)) withcolor \luameshmpcolor; + endfig; +} +\buildMeshBWinc[% +bbox = show, +color = red, +colorBbox = blue!30, +print = points, +meshpoint = x, +scale=0.8cm +]{(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)}% +{% code before + beginfig(0); +} +{% code after + drawdblarrow MeshPoints[3] -- MeshPoints[9] withpen pencircle scaled 1pt + withcolor (0.3,0.7,0.2); + endfig; +} +\meshAddPointBWinc[ +meshpoint = \alpha, +newpoint = y, +colorBack=red!10, +colorNew = green!50!red, +colorCircle = blue, +colorBbox = black!20, +bbox = show, +scale=0.8cm, +step=badtriangles] +{(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)}% +{%code before + picture drawing; + drawing := image( +}{%code after + ); + beginfig(0); + fill MeshPoints[7]--MeshPoints[8]--MeshPoints[9]--MeshPoints[10]--cycle + withcolor \mpcolor{blue!10}; + draw drawing; + endfig; +} +\end{Exemple} +\begin{warning} + The variables \Verb+MeshPoints[]+ are not defined for the argument + corresponding to the code to place before the code generated by + \luamesh. Hence, to use such variables, we have to define a + \Verb+picture+ as shown in the third example above. +\end{warning} + + +\subsection{With TikZ} + +If we have chosen \Verb+tikz+ as the engine drawing, the added code +will be written in \Verb+tikz+. In that case, the two arguments +\meta{code before} and \meta{code after} will be inserted as follows: +\begin{latexcode} +\noindent +\begin{tikzpicture}[x=,y=] + <> + + <> +\end{tikzpicture} +\end{latexcode} + +Because the engine is \Verb+tikz+ their is no issue with colors, the +\LaTeX{} colors (e.g.: \Verb+xcolor+) can be directly used. + +\subsubsection{The Mesh Points} + +The points of the mesh are defined here as \Verb+tikz+ +\Verb+\coordinate+ named as follows +\begin{latexcode} +\coordinate (MeshPoints1) at (...,...); +\coordinate (MeshPoints2) at (...,...); +\coordinate (MeshPoints3) at (...,...); +%etc. +\end{latexcode} + +Once again these coordinates are not yet defined for the \meta{code + before} argument. + +\subsubsection{Examples} + +\begin{Exemple} + \drawPointsMeshinc[ + tikz, + color = blue!50, + print = points, + meshpoint = x, + scale=0.8cm, + ]{(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)}% + {% code before + }% + {% code after + \node[color = blue!50] at (0,2) {Mesh $\mathbb{T}$} ; + } + \buildMeshBWinc[% + tikz, + bbox = show, + color = red, + colorBbox = blue!30, + print = points, + meshpoint = x, + scale=0.8cm + ]{(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)}% + {% code before + } + {% code after + \draw[<->,thick, color=green] (MeshPoints3) -- (MeshPoints9); + } +\end{Exemple} + +\input{dum.bbl} \end{document}