The Higher Education and Research forge

Home My Page Projects Code Snippets Project Openings Complex Surface Machining Optimization
Summary Activity SCM

SCM Repository

authorJean-Max Redonnet <jean-max.redonnet@unniv-tlse3.fr>
Thu, 17 Sep 2020 14:21:57 +0000 (16:21 +0200)
committerJean-Max Redonnet <jean-max.redonnet@unniv-tlse3.fr>
Thu, 17 Sep 2020 14:21:57 +0000 (16:21 +0200)
Publis/JIM2020/v1.0/biblio.bib
Publis/JIM2020/v1.0/main.tex
Publis/JIM2020/v1.0/pcametric.pdf
Publis/JIM2020/v1.0/pcametric.pdf_tex
Publis/JIM2020/v1.0/pcametric.svg

index 60106fb..6c84461 100644 (file)
     issn = {{1045-9227}},
     author = {Xu, R and Wunsch, D},
 }
+
+@article{altinel2005,
+    author = {Alt\i{}nel, {\'I} K and \"Oncan, T},
+    title = {A new enhancement of the Clarke and Wright savings heuristic for the capacitated vehicle routing problem},
+    journal = {Journal of the Operational Research Society},
+    volume = {56},
+    number = {8},
+    pages = {954--961},
+    year  = {2005},
+    publisher = {Taylor & Francis},
+    doi = {10.1057/palgrave.jors.2601916},
+}
+
+@InProceedings{bernon2003,
+    author = {Bernon, Carole and Gleizes, Marie-Pierre and Peyruqueou, Sylvain and Picard, Gauthier},
+    editor = {Petta, Paolo and Tolksdorf, Robert and Zambonelli, Franco},
+    title = {ADELFE: A Methodology for Adaptive Multi-agent Systems Engineering},
+    booktitle = {Engineering Societies in the Agents World III},
+    year = {2003},
+    publisher = {Springer Berlin Heidelberg},
+    address = {Berlin, Heidelberg},
+    pages = {156--169},
+    isbn = {978-3-540-39173-9}
+}
+
+@article{redonnet2013,
+       title = {Study of the effective cutter radius for end milling of free-form surfaces using a torus milling cutter},
+       volume = {45},
+       issn = {0010-4485},
+       number = {6},
+       journal = {Computer-Aided Design},
+       author = {Redonnet, Jean-Max and Djebali, Sonia and Segonds, Stéphane and Senatore, Johanna and Rubio, Walter},
+       month = jun,
+       year = {2013},
+       pages = {951--962},
+}
index ac4c6e3..b6f06f2 100644 (file)
@@ -17,7 +17,7 @@
 \usepackage{multirow}
 \usepackage[squaren, Gray, cdot]{SIunits}
 
-\title{A clustering approach for by-zone machining of free-form surfaces}
+\title{A new clustering approach for by-zone machining of free-form surfaces}
 
 \author{Mahfoud Herraz \and Jean-Max Redonnet \and Marcel Mongeau \and Mohammed Sbihi}
 
 
 \DeclareMathOperator*{\argmax}{arg\,max}
 \DeclareMathOperator*{\argmin}{arg\,min}
+\DeclareMathOperator{\var}{Var}
+\DeclareMathOperator{\cov}{Cov}
 
 \begin{document}
 
 \maketitle
 
 \begin{abstract}
-End-milling of free-form surfaces on multi-axis CNC machines are complex and expensive operations involved in the production of many high-value parts, molds and stamping dies. To carry out such time-expensive operations, partitioning the surface into zones, in order to mill each zone with the most suitable parameters, is an approach gaining credit in recent years.
-       
-In this paper, the partitioning problem is addressed using a clustering approach. The crucial choices of the feature vector and metric are investigated and a new metric, based on Principal Component Analysis (PCA) is proposed. Several clustering algorithm are tested and the results are compared and discussed.
+       End-milling of free-form surfaces on multi-axis CNC machines are complex and expensive operations involved in the production of many high-value parts, molds and stamping dies. To carry out such time-expensive operations, partitioning the surface into zones, in order to mill each zone with the most suitable parameters, is an approach gaining credit in recent years.
 
-       
-\keywords{free-form surfaces \and end-milling \and clustering \and K-means}
+       In this paper, the partitioning problem is addressed using new a clustering approach. Using clustering algorithms, the feature vector and the metric are crucial choices, thus, they are investigated in details and a new metric, based on Principal Component Analysis (PCA) is proposed. Several clustering algorithm are tested and the results are compared and discussed.
+
+
+       \keywords{free-form surfaces \and end-milling \and clustering \and K-means}
 \end{abstract}
 
 \section{Introduction}
 \label{sec:intro}
-The definition of zones for end-milling of free-form surfaces is a complicated problem which has been addressed by several authors. In \cite{vu2020}, the authors propose a partitioning approach for 3-axis machining with toroidal cutter based on minimal improvement of the effective radius. The first zone contains all the points that could be machined along the steepest slope direction of the point with maximum slope angle while statisfying \hl{minimal improvement of the effective radius ??? -> TBD}. The second zone is build similarly using the remaining points. This process is iterated untill no point remains.
+\hl{TODO: Mise en évidence de l'intérêt de l'usinage par zone --- citations}
+
+
+\hl{TODO: points faibles de l'existant ?}
 
-Another method for partitioning surfaces is proposed in \cite{kumazawa2015}. Applicable in 3-axis machining with a ball-end cutter, this method is based on the preferred machining direction field, which maximizes the width of the machining strip (or step-over distance) respecting the scallop height constraint. This field has the properties of symmetric tensor of order 2, which makes it possible to identify the critical points of this tensor which correspond to degenerate points, where all the directions are preferred. Then, depending on the type of each critical point, boundaries between zones are identified around this point, which defines a partition of the surface, finally each zone is machined using an iso-scallop strategy. A very similar method is proposed in \cite{liu2015}: It presents an analytical approach where it identifies the machining direction that maximizes the strip width \hl {to the direction of maximum curvature, this one is calculated as the eigenvector which corresponds to the biggest eigenvalue of the Weingarten endomorphism. *** pas clair pour moi}
+Defining zones for end-milling of free-form surfaces is a complicated problem which has been addressed by several authors.
 
-A method for partitioning free-form surfaces for machining in $3+2$-axes is also proposed by \cite{chen2003}. This method discretizes the surface with a regular isoparametric mesh, and calculates the Gaussian curvature and the average curvature in each node of the mesh. Then, a curvature type, convex, concave, or saddle-like, is assigned to each point according to the signs of the curvatures. After that, the points are divided into accessible and interference-free points, and points that are not accessible without interference. A hierarchical data structure whose levels correspond to the two preceding criteria is used to obtain a coarse partition of the surface. This partition is then refined using the fuzzy C-means algorithm and the number of zones is decided by the subtractive fuzzy clustering method.
+Most of studies are focusing on 3-axis machining.  One of them is presented in \cite{kumazawa2015}. Using a ball-end cutter, this method is based on the preferred machining direction field, which maximizes the width of the machining strip (or step-over distance) respecting the scallop height constraint. This field has the properties of symmetric tensor of order 2, which makes it possible to identify the critical points of this tensor which correspond to degenerate points, where all the directions are preferred. Then, depending on the type of each critical point, boundaries between zones are identified around this point, which defines a partition of the surface, finally each zone is machined using an iso-scallop strategy. A very similar method is proposed in \cite{liu2015}: It presents an analytical approach where it identifies the machining direction that maximizes the strip width \hl {to the direction of maximum curvature, this one is calculated as the eigenvector which corresponds to the biggest eigenvalue of the Weingarten endomorphism. *** pas clair pour moi}
 
-A method for partitioning surfaces in 5-axis machining is proposed by \cite{makhanov2007} based on the Normalized-cut algorithm, used in image segmentation and vector field classification. First, a field of optimal directions is projected onto a regular grid, which defines the interpolation points of the toolpath in the parametric space. Then the surface is partitioned using the Normalized-cut algorithm, the dissimilarity measure is a convex combination of proximity parameters (parametric coordinates $u$ and $v$) and the optimal direction of machining. Each zone is machined using zigzag iso-scallop strategy, or using iso-contour strategy according to the nature of the critical points in this zone.
+Heuristic methods inspired by the vehicle routing problem are used in \cite{djebali2015a}. The aim is to partition surfaces into zones with small variation of the steepest slope direction in order to increase the effective radius of the toroidal cutter, which maximizes the step-over distances and minimizes the toolpath length. The best results were obtained by the Clarke and Wright algorithm \cite{altinel2005}, the parallel implementation of this algorithm being faster. \hl{TBD: The roughness analysis of the adjacent zones reveals that the surface is free from marks due to the entry or exit of the tool on the part surface. The scallop height is not affected by the partitioning effect.}
 
-Heuristic methods inspired by the Vehicle Routing Problem are used by \cite{djebali2015a} to partition surfaces into zones with small variation of the steepest slope direction in order to increase the effective radius of toroidal cutter, which maximizes the step-over distances and minimizes the toolpath length. The best results were obtained by the Clarke and Wright algorithm and the Tabu search, Clarke and Wright search (in parallel) being faster. The roughness analysis of the adjacent zones reveals that the surface is free from marks due to the entry or exit of the tool on the part surface. The scallop height is not affected by the partitioning effect.
+A similar approach aiming to find an optimal partitioning is presented in \cite{djebali2015b}. This approach is based on adaptive multi-agent systems (AMAS) \cite{bernon2003}. The idea is to partition the part surface into zones according to a criterion based on optimal machining direction, considered as being the direction of steepest slope. The part surface is meshed, the optimal direction is calculated on each mesh. On the other hand, the time (or the path) outside the material must be considered, otherwise the optimal partition would be to consider each mesh as a zone. The problem is then solved (using the AMAS approach) by considering an agent on each mesh unit, this agent can access the information about its neighbors zones. The zones are characterized by two contradictory criteria: the number of elements (agents) in the zone and the maximum difference between two directions in the zone \hl{pourquoi c'est contradictoire ?}. When the agent changes its zone, it can also predict the change of its neighbours, thus it will determine its best zone by improving the criteria of its zone and its neighbors zones. Of course, the prediction may contain errors because it does not take into account the decisions of other agents. Therefore, the optimization process requires many iterations to find a stable state in which no agent makes a new decision \hl{TBD: trop long}.
 
-A similar approach aiming to find an optimal partitioning is presented in \cite{djebali2015b}. This approach is based on adaptive multi-agent systems (AMAS). The idea is to partition the part surface into zones according to a criterion based on optimal machining direction, considered as being the direction of steepest slope. The part surface is meshed, the optimal direction is calculated on each mesh. On the other hand, the time (or the path) outside the material must be considered, otherwise the optimal partition would be to consider each mesh as a zone. The problem is then solved (using the AMAS approach) by considering an agent on each mesh, this agent can access the information about its neighbors zones. The zones are characterized by two contradictory criteria: the number of elements (agents) in the zone and the maximum difference between two directions in the zone. When the agent changes its zone, it can also predict the change of its neighbours, thus it will determine its best zone by improving the criteria of its zone and its neighbors zones. Of course, the prediction may contain errors because it does not take into account the decisions of other agents. Therefore, the optimization process requires many iterations to find a stable state in which no agent makes a new decision.
+In \cite{vu2020}, the authors propose a partitioning approach for 3-axis machining with toroidal cutter based on minimal improvement of the effective radius. The first zone contains all the points that could be machined along the steepest slope direction of the point with maximum slope angle while statisfying \hl{minimal improvement of the effective radius ??? -> TBD}. The second zone is build similarly using the remaining points. This process is iterated untill no point remains.
 
-Another approach is presented in \cite{roman2006} for $3\frac{1}{2}\frac{1}{2}$-axes machining, which is the same as machining in 3 axes, plus two rotary axes only serving to define the intermediate positionings of the part. First, a study of the parameters to be used for the feature vector is conducted in order to obtain a better partition of the surface by using the fuzzy c-means algorithm. This study, carried out on two test surfaces, shows that the combination $\left(u,v,\mathbf{N}\right)$ is effective.The orientation of the tool, defined by the vector $\mathbf{T}$, is calculated such that: The axis of the tool is co-planar with the feed rate $\mathbf{F}$ and the axis $\mathbf{Z_m}$ of the machine. The tilt angle is specified by the user. For points where the surface is convex, the tilt angle can be null, and equal to a small value for concave points such as local gouging is avoided. The iso-parametric strategy is adopted for the machining on a test case which shows that the more the number of zones increases, the more the toolpath length decreases. However, the machining time decreases until an optimal zones number, and then starts to increase because of the time necessary for the tool withdrawal to pass from one zone to another.
+Other studies addresses $3+2$-axes machining, which is the same as 3-axes machining, adding two rotation axes used for positionning part between two milling phases. Among them, one of the most noticable is the free-form surfaces partitioning method proposed in \cite{chen2003}. This method discretizes the surface with a regular isoparametric mesh, and calculates the Gaussian curvature and the mean curvature for each node of the mesh. Then, a curvature type, convex, concave, or saddle-like, is assigned to each point. After that, the points are divided into accessible and interference-free points, and points that are not accessible or not accessible without interference. A hierarchical data structure whose levels correspond to the two preceding criteria is used to obtain a coarse partition of the surface \hl{(pas clair)}. This partition is then refined using the fuzzy C-means algorithm and the number of zones is decided by the subtractive fuzzy clustering method \hl{(cite for subtractive fuzzy clustering)}.
 
-To sum up, the objective of such approaches is to find an appropriate partitioning of the surface that will lead to optimal machining. Some approaches consider the partitioning as an optimization problem where the objective function is a machining criterion and variables decide the surface partitioning. This kind of approach is computationally expensive. Yet, the partitioning is directly related to machining. Other approaches consider the partitioning as a classification problem with the aim of finding a clustering of the surface with homogeneous and distinguished zones.
-The common point between all these approaches is that they are based on local criteria: local geometry of the surface, effective radius and step-over distance at the contact point. However, these local parameters do not often allow, given the complexity of free-form surfaces, to find a partition with an optimal machining of the surface. It is therefore necessary to establish global criteria related to the machining time for the partitioning of free-form surfaces. The approach based on principal Component analysis (PCA) suggested in \cite{herraz2020} could be used here to take into account the form-factor of zones and the principal direction, along which the tool reaches its nominal feed rate as long as possible.
+Another clustering approach is presented in \cite{roman2006}. First, a study of the parameters to be used for the feature vector is conducted in order to obtain a better partition of the surface by using the fuzzy c-means algorithm. This study, carried out on two test surfaces, shows that the combination $\left(u,v,\mathbf{N}\right)$ is effective. The orientation of the tool, defined by the vector $\mathbf{T}$, is calculated such that: The axis of the tool is co-planar with the feed rate $\mathbf{F}$ and the axis $\mathbf{Z_m}$ of the machine. The tilt angle is specified by the user. For points where the surface is convex, the tilt angle can be null, and equal to a small value for concave points such as local gouging is avoided. The parallel plane strategy is adopted for the machining on a test case which shows that the more the number of zones increases, the more the toolpath length decreases. However, the machining time decreases until an optimal zones number, and then starts to increase because of the time necessary for the tool withdrawal to travel from one zone to another one.
 
-The remaining of this paper is organised as follows: In Section 2 we present the clustering approaches to be compared in this paper. Details about the implementation, including features-vector and metrics, are presented in Section 3. Results are presented in Section 4, they are discussed and compared to other papers in Section 5. Perspectives and conclusions are drawn in Section 6.
+Partitioning surfaces for 5-axis machining has been addressed by researchers too \hl{TBD: despite poor efficiency of continous milling for free-form surfaces due to rotation axes lag [cite]}. A method based on the Normalized-cut algorithm is proposed in \cite{makhanov2007}. This algorithm is used in image segmentation and vector field classification. First, a field of optimal directions is projected onto a regular grid, which defines the interpolation points of the toolpath in the parametric space. Then the surface is partitioned using the Normalized-cut algorithm, the dissimilarity measure is a convex combination of proximity parameters (parametric coordinates $u$ and $v$) and the optimal direction of machining. Each zone is machined using ``zigzag'' iso-scallop strategy, or using iso-contour strategy according to the nature of the critical points in this zone.
+
+To sum up, the objective of such approaches is to find an appropriate partitioning of the surface that will lead to optimum machining. Some approaches consider the partitioning as an optimization problem where the objective function is a machining criterion (milling time or toopath length). This kind of approach is computationally expensive. Yet, the partitioning is directly related to machining \hl{???}. Other approaches consider the partitioning as a classification problem with the aim of finding a clustering of the surface with homogeneous and distinguished zones.
+
+The common point between all these approaches is that they are based on local criteria: local geometry of the surface, effective radius and step-over distance at the contact point. However, these local parameters do not often allow, given the complexity of free-form surfaces, \hl{TBD: to find a partition with an optimal machining of the surface}. It is therefore necessary to establish global criteria related to the machining time for the partitioning of free-form surfaces. The approach based on principal Component analysis (PCA) suggested in \cite{herraz2020} could be used here to take into account the form-factor of zones and the principal direction, along which the tool reaches its nominal feed rate as long as possible.
+
+The remaining of this paper is organised as follows: In Section 2 we present the clustering approaches to be included in the present study. Details about the implementation, including features-vector and metrics analysis, are presented in Section 3. Results are presented in Section 4. They are discussed and compared to other papers in Section 5. Perspectives and conclusions are drawn in Section 6.
 
 \section{Clustering approach}
-Let $S$ be a parametric surface, a $Z$ partition of $S$ is defined as the set of $z_j$ parts of $S$, non overlapping and whose union is equal to $S$:
+Let $S$ be a parametric surface defined by $\mathbf{S}(u,v)$. A $Z$ partition of $S$ is defined as the set of $z_j$ parts of $S$, non overlapping and whose union is equal to $S$:
 
 \[
        \begin{multlined}
@@ -79,18 +89,23 @@ Let $S$ be a parametric surface, a $Z$ partition of $S$ is defined as the set of
        \end{multlined}
 \]
 
-\subsection{Overview of classification methods}
-The classification methods come from the field of data mining which aims to extract knowledge from large databases. A survey of clustering algorithms can be found in \cite{xu2005}.
+\hl{TODO: Problématique générale du clustering: definir dataset, datapoint, centroid, etc}
+
+\subsection{About clustering algorithms}
+\hl{TODO: Clarifier calssiffication, clustering, etc... Pas clair dans la biblio... clustering = ss-ens de class ou class = supervised et clust = unsupervised...}
+Classification algorithms are coming from the field of data mining procedures which aims to extract knowledge from large databases. An extensive review on unsupervised learning and classification, can be found in \cite{duda2012}
 
 A distinction must be done between supervised and unsupervised classification. Supervised classification algorithms are based on a set of pre-classified data (learning set) to predict the class of a new data. In this case the class number is known and not decided by the algorithm. Among the supervised algorithms we can cite: decision trees, artificial neural networks, naive Bayesian classifiers, support vector machines and others. It is also possible to combine several classifiers to obtain what is called Ensemble methods that are more robust. A literature review can be found in \cite{kotsiantis2006} for more details on superimposed algorithms.
 
-On the other hand, unsupervised classification algorithms are not based on any prior knowledge. At the opposite of supervised algorithms, the purpose is not to predict the class of a new point but to classify existing but unordered data into homogeneous classes. Most of the time, the number of classes is initially unknown but some algorithms allow the user to decide the number of classes in regard of the data to be classified. Unsupervised algorithms include: K-means, fuzzy c-means, hierarchical classification, competitive learning and more. An extensive review on unsupervised learning and classification, can be found in \cite{duda2012}
+On the other hand, unsupervised classification algorithms are not based on any prior knowledge. At the opposite of supervised algorithms, the purpose is not to predict the class of a new point but to classify existing but unordered data into homogeneous classes. Most of the time, the number of classes is initially unknown but some algorithms allow the user to decide the number of classes in regard of the data to be classified. Unsupervised algorithms include: K-means, fuzzy c-means, hierarchical classification, competitive learning and more. A survey of clustering algorithms can be found in \cite{xu2005}.
 
 \subsection{Proposed algorithms}
-Unsupervised classification are obviously the most adapted methods for surface partitioning. Indeed, it is impossible to set up a learning set for supervised algorithm, that can be satisfying for any free-form surface that can be machined. Therefore, we present in this section some unsupervised algorithms that will be used later to partition test surfaces, and represent a large scape of algorithms. First, the K-means algorithm which is based on the calculation of distances from clusters centroids, second, the RPCL algorithm which contains randomness and requires less centroids calculations, last, the ascendant hierarchical clustering which breaks free from the notion of clusters centroids by defining directly distances between clusters. 
+Unsupervised classification are obviously the most adapted methods for surface partitioning. Indeed, it is impossible to set up a learning set for supervised algorithm, that can be satisfying for any free-form surface that can be machined. Therefore, we present in this section some unsupervised algorithms that represent a wide range of clustering algorithms, and will be used later to partition test surfaces.
+
+%First, the K-means algorithm which is based on the calculation of distances from clusters centroids, second, the RPCL algorithm which contains randomness and requires less centroids calculations, last, the ascendant hierarchical clustering which breaks free from the notion of clusters centroids by defining directly distances between clusters. 
 
 \subsubsection{K-means algorithm}
-The K-means algorithm \ref{alg:Kmeans} is one of the most commonly used unsupervised classification algorithms. The theoretical framework of the algorithm and its proof of convergence are presented in \cite{duda2012}. In this article, a way to choose an initial point, which consists in taking a random center among the points the second center is then chosen with a law of probability (the most probable point being the one that has a greater distance from the first center) and so on (this modified version of the algorithm is called K-Means++). Various parallelized version of this algorithm have also been proposed \cite{zhao2009}.
+The K-means algorithm \ref{alg:Kmeans} is one of the most commonly used clustering algorithm. The theoretical framework of this algorithm and its proof of convergence are presented in \cite{duda2012}.
 
 \begin{algorithm}
        \SetAlgoLined
@@ -107,7 +122,9 @@ The K-means algorithm \ref{alg:Kmeans} is one of the most commonly used unsuperv
        \label{alg:Kmeans}
 \end{algorithm}
 
-\subsubsection{Hierarchical ascending algorithm}
+\hl{??? : In this article, a way to choose an initial point, which consists in taking a random center among the points the second center is then chosen with a law of probability (the most probable point being the one that has a greater distance from the first center) and so on (this modified version of the algorithm is called K-Means++)}. Various parallelized version of this algorithm have also been proposed \cite{zhao2009}.
+
+\subsubsection{Hierarchical ascending classification algorithm}
 The hierarchical ascending classification algorithm is also widely used in unsupervised classification. Initially, each individual forms a class, that is, $n$ classes. The number of classes is iteratively reduced to $n_c<n$. At each stage, the two closest (most similar) classes are merged. In other words, the pair of classes with minimal dissimilarity, called also index of aggregation. Since we first gather the closest classes, the dissimilarity is low at first iterations, but it will grow as iterations go further. For more details, the reader is referred to \cite{szekely2005}.
 
 The dissimilarity between two classes $C_1=\{x\}$ et $C_2=\{y\}$ containing each one a single point is simply the distance between the two points: $\mbox{dissim}(C_1,C_2)=\mbox{dissim}(x,y)$. When classes have many points, there  exist several dissimilarity measures:
@@ -121,12 +138,11 @@ The dissimilarity between two classes $C_1=\{x\}$ et $C_2=\{y\}$ containing each
              \begin{equation*}
                      \mbox{dissim}(C_1,C_2)=\displaystyle\max_{x\in C_1,y\in C_2} \mbox{dissim}(x,y)
              \end{equation*}
-       \item the unweighted average linkage is the average distance between elements of $C_1$ and $C_2$~:
+       \item the unweighted average linkage is the average distance between elements of $C_1$ and $C_2$:
              \begin{equation*}
                      \mbox{dissim}(C_1,C_2)=\frac{1}{\mbox{card}(C_1)\times\mbox{card}(C_2)}\sum_{x\in C_1}\sum_{y\in C_2} \mbox{dissim}(x,y)
              \end{equation*}
        \item the Ward's minimum variance distance defined initially as the squared Euclidean distance and recursively calculated using the following relation, where $n_i$, $n_j$ and $n_k$ are the sizes of $C_i$, $C_j$ and $C_k$ respectively:
-             
              \begin{equation*}
                      \begin{multlined}
                              \mbox{dissim}(C_i\cup C_j,C_k) = \frac{1}{n_i+n_j+n_k} \left(  (n_i+n_k)\mbox{dissim}(C_i,C_k) \right.\\
@@ -136,9 +152,9 @@ The dissimilarity between two classes $C_1=\{x\}$ et $C_2=\{y\}$ containing each
 \end{enumerate}
 
 \subsubsection{Rival Penalized Competitive Learning algorithm}
-The Rival Penalized Competitive Learning (RPCL) introduced by \cite{xu1993}, is a non-deterministic classification algorithm. Initially, a number of centers are defined. At each iteration, one point of the Data set is randomly selected and the distance between each center and this point is calculated, not only the winning center (closest) is brought closer to the point in question, but also its rival (the second closest center to the point) is driven away (or penalized). This process is more efficient because it makes it possible to find the expected result in the case where the number of centers is greater than the actual number of classes of the data set.
+The Rival Penalized Competitive Learning (RPCL) introduced by \cite{xu1993}, is a non-deterministic classification algorithm. Initially, a number of centers are defined. At each iteration, one point of the dataset is randomly selected and the distance between each center and this point is calculated. The winning center (closest) is brought closer \hl{to the point in question}, in the same time, its rival (the second closest center to the point) is driven away (or penalized). \hl{This process is more efficient because it makes it possible to find the expected result in the case where the number of centers is greater than the actual number of classes of the data set : pas clair}.
 
-In addition, the RPCL algorithm takes into account the history of the winning center, which means the number of times it has won, in order to improve the sensitivity of the basic Competitive Learning algorithm with respect to the initialization of centers. The procedure of RPCL algorithm is detailed in \ref{alg:RPCL}.
+In addition, the RPCL algorithm takes into account the history of the winning center, which means the number of times it has won, in order to improve the sensitivity of the basic Competitive Learning algorithm with respect to the initialization of centers. The procedure of RPCL algorithm is detailed in algorithm \ref{alg:RPCL}.
 
 \begin{algorithm}
        \SetAlgoLined
@@ -160,123 +176,136 @@ In addition, the RPCL algorithm takes into account the history of the winning ce
        \label{alg:RPCL}
 \end{algorithm}
 
-In addition to data classification, the article proposes an application of the RPCL algorithm for training RBF neural networks and detection curves in digital images.
+\hl{In addition to data classification, the article --- lequel --- proposes an application of the RPCL algorithm for training RBF neural networks and detection curves in digital images. --- vraiment utile ? TBD}
 
-The advantage of the hierarchical classification algorithm over K-means is that it does not require to define the number of classes, it is automatically calculated according to the stopping criterion (often, the number of classes retained corresponds to the iteration with the maximum distance step). However, the hierarchical classification takes more time of calculation than the other algorithms, especially that the mesh of the surface must be rather fine for the sake of precision, which risks giving a very large number of classes at the beginning. As for the RPCL, it is faster than the others but its non-deterministic nature is likely to generate different solutions for the same surface.
+The advantage of the hierarchical classification algorithm over K-means is that it does not require to define the number of classes, it is automatically calculated according to the stopping criterion (often, the number of classes retained corresponds to the iteration with the maximum distance step). However, the hierarchical classification takes more time of calculation than the other algorithms, especially that the mesh of the surface must be rather fine for the sake of precision, which risks giving a very large number of classes at the beginning. As for the RPCL, it is faster than the others but its non-deterministic nature is likely to generate different solutions for the same surface. \hl{TBD: No backward possibility}
 
 \section{Implementation}
-
-The code enabeling surface clustering and machining simulation is written in Java programing language. Prior to any clustering operation, a regular mesh of isoparametric is defined onto the surface. This way, a set of elementary mesh units, defined by their parametric boudaries are also defined. For each mesh unit, a data point located at its center is defined. Clustering algorithms operate on these data points (Figure \ref{fig:sampling}).
+Prior to any clustering operation, a regular mesh of isoparametric curves is defined onto the surface. This way, a set of elementary meshes, defined by their parametric boudaries are also defined. For each mesh unit, a data point located at its center is defined. Clustering algorithms operate on these data points (Figure \ref{fig:sampling}).
 \begin{figure}[h]
-    \centering
-    \def\svgwidth{\linewidth}
-    \input{sampling.pdf_tex}
-    \caption{Sampling-point definition}\label{fig:sampling}
+       \centering
+       \def\svgwidth{\linewidth}
+       \input{sampling.pdf_tex}
+       \caption{Sampling-point definition}\label{fig:sampling}
 \end{figure}
 
+Actually the clustering algorithms can operate on any datapoints set. However, in order to provide good results, these points have to be equally spreaded among the whole surface. This is why, in this study, an isoparametric based mesh have been chosen to define datapoints.
+
 \subsection{Feature vector}
-For any given non-supervised classification algorithm, it is necessary to define the notion of distance or similarity between two points. Actually, the clustering result depends strongly on the choice of metric. In free-form surfaces end-milling, it is necessary to consider two different types of parameters:
-\begin{itemize}
-       \item spatial proximity parameters : 3D coordinates of datapoints or their parametric coordinates $(u,v)$ could be meaningful choices in this case
-       \item machining related parameters : the normal vector $\mathbf{n}(u,v)$, the curvatures (Gaussian, average or principal) could be meaningful choices in this case.
-\end{itemize}
+For any non-supervised classification algorithm, it is necessary to define the notion of distance or similarity between two points. Indeed, this distance must be calculated using the most relevant parameters.
 
-A numerical test campaign on 3 test surfaces presented by \cite{roman2006} shows that a good choice of characteristic (or features-vector) parameters should include informations from the parametric coordinates $u,v$ and the normal vector $\mathbf{n}(u,v)$. As a result, we consider in what follows the combination of:
+In free-form surfaces end-milling, it is necessary to consider two different types of parameters:
 \begin{itemize}
-  \item $u$ and $v$: the parametric coordinates of the datapoints
-  \item $s(u,v)$: the value of the slope (in radians)
-  \item $\theta(u,v)$: the angle between the direction of greatest slope projected on the plane $\mathbf{X_m},\mathbf{Y_m}$ of the machine coordinate, and the axis $\mathbf{X_m}$.$\theta\in\left[0,\pi\right]$ because given a direction, the machining along both senses is the same.
+       \item spatial proximity parameters : 3D coordinates of datapoints or their parametric coordinates $(u,v)$ could be meaningful choices in this case
+       \item machining related parameters : the normal vector $\mathbf{n}(u,v)$, the curvatures (Gaussian, mean or principal) could be meaningful choices in this case.
 \end{itemize}
 
-\begin{figure}[h]
-    \centering
-    \def\svgwidth{\linewidth}
-    \input{features.pdf_tex}
-    \caption{The four components ($u_i$, $v_i$, $s_i$ and $\theta_i$) of the feature vectors}
- \label{fig:feature}
+The choice of feature vector components is illustrated in Figure \ref{fig:feature}:
+\begin{figure}[ht]
+       \centering
+       \def\svgwidth{\linewidth}
+       \input{features.pdf_tex}
+       \caption{The four components ($u_i$, $v_i$, $s_i$ and $\theta_i$) of the feature vectors}
+       \label{fig:feature}
 \end{figure}
 
+A good analysis of feature vector component is presented in \cite{roman2006}. Finally, authors of this paper choose to use the parametric coordinates $u,v$ and the normal vector $\mathbf{n}(u,v)$.
 
+In the present study a slightly different choice have been made. Like in \cite{roman2006} the parametric coordinates $u$ and $v$ of the datapoints are used to express the spatial proximity of datapoints, but as machining related parameters, instead of $\mathbf{n}(u,v)$, we choose to use:
+\begin{itemize}
+       \item $s(u,v)$: the value of the steepest slope
+       \item $\theta(u,v)$: the angle between the direction of steepest slope projected on the plane $\mathbf{X_m},\mathbf{Y_m}$ of the machine reference, and the axis $\mathbf{X_m}$.
+\end{itemize}
 
-
+This choice have been made to reduce the size of feature vector, and to be more specific on parameters that really inluence the machining process. Furthermore, $s(u,v)$ and $\theta(u,v)$ are angles that are directly employed in the anlytical formula used to calculate the effective radius of a toroidal cutter \cite{redonnet2013}.
 
 \subsection{Metrics}
-In the following we present different metrics, one of which is based on the notion of principal direction \cite{herraz2020} calculated by PCA.
+Once the relevant parameters selected, a metric must be defined. A metric defines how the distance or more precisely similarity between points is calculated. Actually, the result of a clustering process  depends strongly on the choice of the metric.
 
-The surface $S$ is discretized with a regular isoparametric curves meshing. Let $N$ be the number of meshes (or elementary surfaces). For each mesh $i\in\left[1,N\right]$, the features vector is defined at the mesh center point: $x_i=(u_i,v_i,s_i,\theta_i)^T$. The surface is then partitioned into $K$ zones. In what follows, the mesh number $i$ is denoted $m_i$ and the center point of zone $k\in\left[1,K\right]$ is denoted $c_k$.
+In the following we present different metrics that have been tested in a clustering approach. Thereafter, a new metric, specifically dedicated to free-form surfaces machining, is introduced. This new metric is based on the notion of principal direction \cite{herraz2020} and calculated using Principal Component Analysis (PCA).
+
+The surface $S$ is discretized with a regular isoparametric curves meshing. Let $N$ be the number of meshes (or elementary surfaces). For each mesh $i\in\left[1,N\right]$, the features vector is defined at the mesh center point: $x_i=(u_i,v_i,s_i,\theta_i)^T$. The surface is then partitioned into $K$ zones. In what follows, the mesh number $i$ is denoted $m_i$ and the centroid of zone $k\in\left[1,K\right]$ is denoted $c_k$. \hl{As in clustering algorithms, the distances are always calculated between a given mesh unit and a centroid, definitions below uses these parameters:}
 
 \begin{enumerate}
-       \item \textbf{Euclidean distance:} the Euclidean distance in the four-dimensional space of parameters ($u,v,s,\theta$) is written:
+       \item \textbf{Euclidean distance:} in the four-dimensional space of parameters ($u,v,s,\theta$), the Euclidean distance between a mesh $m_i$ and the center of a zone $c_k$ is written:
              \begin{equation*}
                      d^2(m_i,c_k)=(u_i-u_k)^2+(v_i-v_k)^2+(s_i-s_k)^2+(\theta_i-\theta_k)^2
              \end{equation*}
-             This distance gives the same importance to all variables, which is not necessarily optimal. In addition, several terms that are not homogeneous (units and orders of different sizes) are summed, which may luck some sens. The advantage of Euclidean metric lies in its simplicity in terms of implementation.
-             
-             The metric can be restricted to parametric coordinates and thus written as:
-             \begin{equation*}
-                     d^2(m_i,c_k)=(u_i-u_k)^2+(v_i-v_k)^2
-             \end{equation*}
-             In this case, the obtained solution is a Voronoi diagram (in parametric space), whose seeds correspond to the centroids of each zone. However, such a distance only takes into account the proximity between meshes and neglects the geometric characteristics associated with the normal vector which has strong impact on machining.
-             
-       \item \textbf{Mahalanobis distance:} This distance \cite{mclachlan1999} is widely used in statistics and signal processing. It differs from the Euclidean distance in that it takes into account the variance and correlation of the data set. Thus, unlike the Euclidean distance where all the components of the vectors are treated independently and in the same way, the distance of Mahalanobis gives a smaller weight to the most dispersed variables and takes into account the correlation between variables.
-             
+
+             This distance gives the same importance to all the variables, which is not necessarily optimal. In addition, several terms which are not homogeneous (different units and orders of magnitude) are added together, which lacks meaning. The advantage of the Euclidean metric lies in its simplicity of implementation.
+
+             %       The metric can be restricted to parametric coordinates and thus written as:
+             %       \begin{equation*}
+             %               d^2(m_i,c_k)=(u_i-u_k)^2+(v_i-v_k)^2
+             %       \end{equation*}
+             %       In this case, the obtained solution is a Voronoi diagram (in parametric space), whose seeds correspond to the centroids of each zone. However, such a distance only takes into account the proximity between meshes and neglects the geometric characteristics associated with the normal vector which has strong impact on machining.
+
+       \item \textbf{Mahalanobis distance:} This distance is widely used in statistics and signal processing \cite{mclachlan1999}. It differs from the Euclidean distance in that it takes into account the variance and correlation of the data set. Thus, unlike the Euclidean distance where all the components of the vectors are treated independently and in the same way, this metric gives a smaller weight to the most dispersed variables and takes into account the correlation between variables.
+
              Let $\varSigma$ be the covariance matrix of features vectors over the surface meshing:
              \begin{equation*}
                      \varSigma=\begin{pmatrix}
-                             \mbox{Var}(u) & \mbox{Cov}(u,v) & \mbox{Cov}(u,s) & \mbox{Cov}(u,\theta) \\
-                             \mbox{Cov}(u,v) & \mbox{Var}(v) & \mbox{Cov}(v,s) & \mbox{Cov}(v,\theta) \\
-                             \mbox{Cov}(u,s) & \mbox{Cov}(v,s) & \mbox{Var}(s) & \mbox{Cov}(s,\theta) \\
-                             \mbox{Cov}(u,\theta) & \mbox{Cov}(v,\theta) & \mbox{Cov}(s,\theta) & \mbox{Var}(\theta)
+                             \var(u)        & \cov(u,v)      & \cov(u,s)      & \cov(u,\theta) \\
+                             \cov(u,v)      & \var(v)        & \cov(v,s)      & \cov(v,\theta) \\
+                             \cov(u,s)      & \cov(v,s)      & \var(s)        & \cov(s,\theta) \\
+                             \cov(u,\theta) & \cov(v,\theta) & \cov(s,\theta) & \var(\theta)
                      \end{pmatrix}
              \end{equation*}
-             
+
              The distance between a mesh $m_i$ and the center of a zone $c_k$ is:
              \begin{equation*}
                      d^2(m_i,c_k)=x_i^T \varSigma ^{-1} x_k
              \end{equation*}
-             
+
        \item \textbf{Standard-deviation based distance:} This distance is also used in statistics for treatement of heterogeneous data with different orders of magnitude and variances. Each term is divided by the corresponding standard deviation. The distance between a mesh $m_i$ and the center of a zone $c_k$ is:
-             
+
              \begin{equation*}
                      d^2(m_i,c_k)=\frac{(u_i-u_k)^2}{\sigma_u}+\frac{(v_i-v_k)^2}{\sigma_v}+\frac{(s_i-s_k)^2}{\sigma_s}+\frac{(\theta_i-\theta_k)^2}{\sigma_\theta}
              \end{equation*}
-             
-             Where $\sigma_u=\sqrt{\mbox{Var}(u)}$ is the standard deviation of variable $u$ over the whole surface $S$ and so on for the other variables. The distance could be also expressed as:
-             
+
+             Where $\sigma_u=\sqrt{\var(u)}$ is the standard deviation of variable $u$ over the whole surface $S$ and so on for the other variables. The distance could be also expressed as:
+
              \begin{equation*}
                      d^2(m_i,c_k)=x_i^T\times{\begin{pmatrix}
-                                     \sigma_u & 0 & 0 & 0             \\
-                                     0 & \sigma_v & 0 & 0             \\
-                                     0 & 0 & \sigma_s & 0             \\
-                                     0 & 0 & 0 & \sigma_\theta
+                                     \sigma_u & 0        & 0        & 0             \\
+                                     0        & \sigma_v & 0        & 0             \\
+                                     0        & 0        & \sigma_s & 0             \\
+                                     0        & 0        & 0        & \sigma_\theta
                              \end{pmatrix}}^{-1}\times x_k=x_i^T {D_\sigma}^{-1} x_k
              \end{equation*}
-             
+
              This distance could be seen as a particular case of the Mahalanobis distance, where covariances of different pairs of variables is null. In fact, standard deviation based distance does not take in account the correlation between variables. Yet, it allows the summation of different terms since the weight affected to each terms is proportional to its variance, which is not the case with Euclidean distance.
-             
-       \item \textbf{PCA based distance:} The aim of this distance is to introduce the principal direction of a zone in order to promote zones with distinguished principal directions. Moreover, if such direction coincides with the steepest slope direction defined by angle $\theta_k$, a drastic gain is observed in terms of machining time. Otherwise, it can at least provide an interesting start point for optimizing the machining direction.
-             
-             Hence, in order to evaluate the distance between a mesh $i$ and the center of a zone $k$, two terms are added to the Euclidean distance: First, the difference between the principal direction and the direction defined by $m_i$ and $c_k$. This first term is useful for penalizing the meshes that are far from the current principal direction of the zone. The second term ensures that the resulting principal direction is not far from steepest slope direction.
-             
-             Equation \ref{eq:distanceACP} provides the expression of PCA based distance between mesh $m_i$ and center $c_k$.
-             
-          \begin{multline}\label{eq:distanceACP}
-          d^2(m_i,c_k)=(u_i-u_k)^2 +(v_i-v_k)^2+(s_i-s_k)^2\\ +(\theta_i-\theta_k)^2 
-          +\left(\frac{\lambda_I}{\lambda_{II}}\right)^2\left[\sin^2(\theta_I-\beta_{ik})+\sin^2(\theta_{k}-\theta_I^{'}) \right]
-          \end{multline}
-
-             Where $\lambda_{II}$ is the second eigen value of matrix $C$, $\theta_I$ the angle between axis $\mathbf{X_m}$ of the machine and and principal direction of zone $k$. $\beta_{ik}$ is the angle between vector $\mathbf{S}(u_i,v_i)-\mathbf{S}(u_k,v_k)$ and the axis $\mathbf{X_m}$, and $\theta_I^{'}$ defines the new principal direction of zone $k$ in case mesh $i$ is affected to it. Figure \ref{figpca} illustrates the different angles.
-             
-             \begin{figure}
-                     \centering
-                 \def\svgwidth{\linewidth}
-                     \input{pcametric.pdf_tex}
-                     \caption{Different angles involved in the evaluation of PCA based distance} %change u and v to Xm and Ym
-                     \label{figpca}
-             \end{figure}
-             
 \end{enumerate}
 
+\hl{1 phrase d'intro...}
+
+\hl{brief sur l'analyse PCA ?}
+
+\textbf{PCA based distance:}
+
+The aim of this new metric is to introduce the principal direction of a zone in order to promote zones with distinguished principal directions. Moreover, if such direction coincides with the steepest slope direction defined by angle $\theta_k$, a drastic gain is observed in terms of machining time. Otherwise, it can at least provide an interesting start point for optimizing the machining direction.
+
+Hence, in order to evaluate the distance between a mesh $i$ and the center of a zone $k$, two terms are added to the Euclidean distance: First, the difference between the principal direction and the direction defined by $m_i$ and $c_k$. This first term is useful for penalizing the meshes that are far from the current principal direction of the zone. The second term ensures that the resulting principal direction is not far from steepest slope direction.
+
+Equation \ref{eq:distanceACP} provides the expression of PCA based distance between mesh $m_i$ and center $c_k$.
+
+\begin{multline}\label{eq:distanceACP}
+       d^2(m_i,c_k)=(u_i-u_k)^2 +(v_i-v_k)^2+(s_i-s_k)^2\\ +(\theta_i-\theta_k)^2
+       +\left(\frac{\lambda_I}{\lambda_{II}}\right)^2\left[\sin^2(\theta_I-\beta_{ik})+\sin^2(\theta_{k}-\theta_I^{'}) \right]
+\end{multline}
+
+Where $\lambda_{II}$ is the second eigen value of matrix $C$, $\theta_I$ the angle between axis $\mathbf{X_m}$ of the machine and and principal direction of zone $k$. $\beta_{ik}$ is the angle between vector $\mathbf{S}(u_i,v_i)-\mathbf{S}(u_k,v_k)$ and the axis $\mathbf{X_m}$, and $\theta_I^{'}$ defines the new principal direction of zone $k$ in case mesh $i$ is affected to it. Figure \ref{figpca} illustrates the different angles.
+
+\begin{figure}
+       \centering
+       \def\svgwidth{\linewidth}
+       \input{pcametric.pdf_tex}
+       \caption{Different angles involved in the evaluation of PCA based distance} %change u and v to Xm and Ym
+       \label{figpca}
+\end{figure}
+
+
+
 
 \subsection{Connected components analysis}
 
@@ -286,7 +315,7 @@ It is thus necessary to check before machining, if all zones are connected and b
 
 In fact, this problem could be considered as a well-known Connected Components Search (CCS) \cite{skiena1998} in a non oriented graph. A graph is associated to a given partition, the vertices of the graph corresponds to meshes of the surface. Two vertices are adjacent if they represent two adjacent meshes belonging to the same zone. As a result, finding the connected components of the graph is equivalent to finding the connected regions among each zone, these regions are considered in what follows as different zones. The problem is solved using a connected components search algorithm based on Breadth-First Search (BFS) algorithm.
 
-However, the computation time related to identifying connected components might be not neglectible when CCS is used, especially if the meshing is fine, which corresponds to a large number of vertices in the graph and BFS may take time. 
+However, the computation time related to identifying connected components might be not neglectible when CCS is used, especially if the meshing is fine, which corresponds to a large number of vertices in the graph and BFS may take time.
 
 A faster algorithm, inspired by Connected Components Labeling (CCL) \cite{he2017} algorithms have been developped. Also called blob extraction or region labeling the CCL algorithms are originally image-processing and analysis techniques aiming at grouping the pixels of an image into components using a given heuristic.
 
@@ -294,41 +323,41 @@ A faster algorithm, inspired by Connected Components Labeling (CCL) \cite{he2017
        \SetAlgoLined
        \caption{CCl-like algorithme for connected components analysis (principle)}
        \DontPrintSemicolon
-    \SetKwIF{If}{ElseIf}{Else}{if}{}{else if}{else}{}
-    \SetKwFor{For}{for}{}{}
+       \SetKwIF{If}{ElseIf}{Else}{if}{}{else if}{else}{}
+       \SetKwFor{For}{for}{}{}
        \SetKwFunction{Lbl}{label}
-    \SetKwFunction{FnMain}{main}
+       \SetKwFunction{FnMain}{main}
        \SetKwProg{Fn}{Function}{:}{}
        \SetKw{KwAnd}{and}
 
        \KwData{$zID$ array, $labels$ array, $tessU$, $tessV$}
-           \Fn{\Lbl{i, j, l}}{
-            $labels[i][j] = l$ \\
-            \uIf {zID[i - 1][j] == zID[i][j] \KwAnd labels[i - 1][j] == null}{
-                \Lbl($i - 1$, $j$, $l$)
-            }
-            \uIf {zID[i][j - 1] == zID[i][j]  \KwAnd labels[i][j - 1] == null}{
-                \Lbl($i$, $j - 1$, $l$)
-            }
-            \uIf {zID[i + 1][j] == zID[i][j]  \KwAnd labels[i + 1][j] == null} {
-                \Lbl($i + 1$, $j$, $l$)
-            }
-            \uIf {zID[i][j + 1] == zID[i][j]  \KwAnd labels[i][j + 1] == null} {
-                \Lbl($i$, $j + 1$, $l$)
-            }
-   }
-   \Fn{\FnMain}{
-            $l = 0$ \\
-                       \Lbl($0$, $0$, $l$) \\
-                       \For {i = 0 \KwTo tessU - 1}{
-                               \For {j = 0 \KwTo tessV - 1}{
-                                       \uIf {labels[i][j] == null} {
-                                               $l = l + 1$ \\
-                                               \Lbl($i$, $j$, $l$)
-                                       }
-                }
-            }
-   }
+       \Fn{\Lbl{i, j, l}}{
+               $labels[i][j] = l$ \\
+               \uIf {zID[i - 1][j] == zID[i][j] \KwAnd labels[i - 1][j] == null}{
+                       \Lbl($i - 1$, $j$, $l$)
+               }
+               \uIf {zID[i][j - 1] == zID[i][j]  \KwAnd labels[i][j - 1] == null}{
+                       \Lbl($i$, $j - 1$, $l$)
+               }
+               \uIf {zID[i + 1][j] == zID[i][j]  \KwAnd labels[i + 1][j] == null} {
+                       \Lbl($i + 1$, $j$, $l$)
+               }
+               \uIf {zID[i][j + 1] == zID[i][j]  \KwAnd labels[i][j + 1] == null} {
+                       \Lbl($i$, $j + 1$, $l$)
+               }
+       }
+       \Fn{\FnMain}{
+               $l = 0$ \\
+               \Lbl($0$, $0$, $l$) \\
+               \For {i = 0 \KwTo tessU - 1}{
+                       \For {j = 0 \KwTo tessV - 1}{
+                               \uIf {labels[i][j] == null} {
+                                       $l = l + 1$ \\
+                                       \Lbl($i$, $j$, $l$)
+                               }
+                       }
+               }
+       }
        \label{alg:ccl}
 \end{algorithm}
 
@@ -345,23 +374,23 @@ Let $n\in\mathbb{N}$ be the number of elements of a given zone, $\mathbf{X}_i\in
 \begin{itemize}
 
        \item \textbf{Mesh addition case}
-             
+
              Consider a new mesh with vector $\mathbf{X}_{n+1}$ being added to the given zone, the number of meshes is now $n+1$. The mean vector of the new zone is $\mathbf{E}_{n+1}$ and its covariance matrix is $\mathbf{\varSigma}_{n+1}$.
              Equation \ref{eq:addcase} allows the calculation of $\mathbf{\varSigma}_{n+1}$ from $\mathbf{\varSigma}_n$, $\mathbf{E}_n$ and $\mathbf{X}_{n+1}$, the proof of the formula is given in appendix \ref{sec:appA1}
-             
+
              \begin{multline}\label{eq:addcase}
                      \mathbf{\varSigma}_{n+1}=\frac{n}{n+1}\left(\mathbf{\varSigma}_n+\mathbf{E}_n\mathbf{E}_n^T\right)+\frac{\mathbf{X}_{n+1}\mathbf{X}_{n+1}^T}{n+1} \\ -\left(\frac{n}{n+1}\mathbf{E}_n+\frac{\mathbf{X}_{n+1}}{n+1}\right)\left(\frac{n}{n+1}\mathbf{E}_n+\frac{\mathbf{X}_{n+1}}{n+1}\right)^T
              \end{multline}
-             
+
        \item \textbf{Mesh removal case}
-             
+
              Consider now a mesh $r\in\left[1,n\right]$ being removed from the zone, the number of meshes is now $n-1$. The mean vector of the new zone is $\mathbf{E}_{n-1}$ and its covariance matrix is $\mathbf{\varSigma}_{n-1}$.
              Equation \ref{eq:removecase} allows the calculation of $\mathbf{\varSigma}_{n-1}$ from $\mathbf{\varSigma}_n$, $\mathbf{E}_n$ and $\mathbf{X}_{r}$, the proof of the formula is given in appendix \ref{sec:appA2}.
-             
+
              \begin{multline}\label{eq:removecase}
                      \mathbf{\varSigma}_{n-1}=\frac{n}{n-1}\left(\mathbf{\varSigma}_n+\mathbf{E}_n\mathbf{E}_n^T\right)-\frac{\mathbf{X}_r\mathbf{X}_r^T}{n-1} \\ -\left(\frac{n}{n-1}\mathbf{E}_n -\frac{\mathbf{X}_r}{n-1}\right)\left(\frac{n}{n-1}\mathbf{E}_n-\frac{\mathbf{X}_r}{n-1}\right)^T
              \end{multline}
-             
+
 \end{itemize}
 
 In practice, a mesh can change its zone at each iteration during the assignment step, thus equation \ref{eq:addcase} applies to the new zone and equation \ref{eq:removecase} applies to the previous zone. If a mesh does not change its zone, which happens more often as the partitioning converges, there is no need to update covariance matrix. This allows to save substantially the computation time, especially during the last iterations.
@@ -410,19 +439,19 @@ The table \ref{tab:res_choi}, respectively \ref{tab:res_tile}, summarizes the ti
        \centering
        \begin{tabular}{cccccccc}
                \hline\noalign{\smallskip}
-               \multirow{2}{*}{direction} & \multirow{2}{*}{metric} & \multicolumn{2}{c}{K-means} & \multicolumn{2}{c}{RPCL}& \multicolumn{2}{c}{HC} \\
-               \noalign{\smallskip}\cline{3-8}\noalign{\smallskip} & & time & length & time & length & time & length \\
+               \multirow{2}{*}{direction}                          & \multirow{2}{*}{metric} & \multicolumn{2}{c}{K-means} & \multicolumn{2}{c}{RPCL} & \multicolumn{2}{c}{HC}                                                           \\
+               \noalign{\smallskip}\cline{3-8}\noalign{\smallskip} &                         & time                        & length                   & time                   & length & time                   & length                \\
                \noalign{\smallskip}\hline\noalign{\smallskip}
-               \multirow{4}{*}{steepest slope} & Euclidian & 103.3 & 4694 & 98.7& 4861 & \multirow{4}{*}{117.1} & \multirow{4}{*}{4454} \\
-                & PCA & 96.4 & 4901 & 95.8 & 5495 & & \\
-                & Mahalanobis & 123.2 & 6069 & 105.9 & 5777 & & \\
-                & std deviation & 100.7 & 4896 & 101.2 & 4780 & & \\
+               \multirow{4}{*}{steepest slope}                     & Euclidian               & 103.3                       & 4694                     & 98.7                   & 4861   & \multirow{4}{*}{117.1} & \multirow{4}{*}{4454} \\
+                                                                   & PCA                     & 96.4                        & 4901                     & 95.8                   & 5495   &                        &                       \\
+                                                                   & Mahalanobis             & 123.2                       & 6069                     & 105.9                  & 5777   &                        &                       \\
+                                                                   & std deviation           & 100.7                       & 4896                     & 101.2                  & 4780   &                        &                       \\
                \hline\noalign{\smallskip}
-               \multirow{4}{*}{principal} & Euclidian & 107.6 & 6178 & 102.2 & 6333 & \multirow{4}{*}{136.8} & \multirow{4}{*}{6302}  \\
-                & PCA & 106.5 & 6170 & 110.9 & 6356 & & \\
-                & Mahalanobis & 106.8 & 6511 & 104.1 & 6652 & & \\
-                & std deviation & 109.3 & 6433 & 110.7 & 6447 & & \\
-                \noalign{\smallskip}\hline
+               \multirow{4}{*}{principal}                          & Euclidian               & 107.6                       & 6178                     & 102.2                  & 6333   & \multirow{4}{*}{136.8} & \multirow{4}{*}{6302} \\
+                                                                   & PCA                     & 106.5                       & 6170                     & 110.9                  & 6356   &                        &                       \\
+                                                                   & Mahalanobis             & 106.8                       & 6511                     & 104.1                  & 6652   &                        &                       \\
+                                                                   & std deviation           & 109.3                       & 6433                     & 110.7                  & 6447   &                        &                       \\
+               \noalign{\smallskip}\hline
        \end{tabular}
 \end{table*}
 
@@ -432,19 +461,19 @@ The table \ref{tab:res_choi}, respectively \ref{tab:res_tile}, summarizes the ti
        \centering
        \begin{tabular}{cccccccc}
                \hline\noalign{\smallskip}
-               \multirow{2}{*}{direction} & \multirow{2}{*}{metric} & \multicolumn{2}{c}{K-means} & \multicolumn{2}{c}{RPCL}& \multicolumn{2}{c}{HC} \\
-               \noalign{\smallskip}\cline{3-8}\noalign{\smallskip} & & time & length & time & length & time & length \\
+               \multirow{2}{*}{direction}                          & \multirow{2}{*}{metric} & \multicolumn{2}{c}{K-means} & \multicolumn{2}{c}{RPCL} & \multicolumn{2}{c}{HC}                                                          \\
+               \noalign{\smallskip}\cline{3-8}\noalign{\smallskip} &                         & time                        & length                   & time                   & length & time                  & length                \\
                \noalign{\smallskip}\hline\noalign{\smallskip}
-               \multirow{4}{*}{steepest slope} & Euclidian & 90.6 & 4562 & 80.8 & 5804 & \multirow{4}{*}{96.2} & \multirow{4}{*}{4630} \\
-                & PCA & 90.8 & 4577 & 91.9 & 4602 & & \\
-                & Mahalanobis & 88.0 & 4890 & 101.0 & 4672 & & \\
-                & std deviation & 90.8 & 4593 & 91.3 & 4901 & & \\
+               \multirow{4}{*}{steepest slope}                     & Euclidian               & 90.6                        & 4562                     & 80.8                   & 5804   & \multirow{4}{*}{96.2} & \multirow{4}{*}{4630} \\
+                                                                   & PCA                     & 90.8                        & 4577                     & 91.9                   & 4602   &                       &                       \\
+                                                                   & Mahalanobis             & 88.0                        & 4890                     & 101.0                  & 4672   &                       &                       \\
+                                                                   & std deviation           & 90.8                        & 4593                     & 91.3                   & 4901   &                       &                       \\
                \hline\noalign{\smallskip}
-               \multirow{4}{*}{principal} & Euclidian & 83.6 & 5844 & 86.8 & 5912 & \multirow{4}{*}{83.4} & \multirow{4}{*}{5650} \\
-                & PCA & 83.3 & 5821 & 85.9 & 5869 & & \\
-                & Mahalanobis & 88.1 & 5455 & 86.7 & 5629 & & \\
-                & std deviation & 78.7 & 5539 & 83.3 & 5780 & & \\
-                \noalign{\smallskip}\hline
+               \multirow{4}{*}{principal}                          & Euclidian               & 83.6                        & 5844                     & 86.8                   & 5912   & \multirow{4}{*}{83.4} & \multirow{4}{*}{5650} \\
+                                                                   & PCA                     & 83.3                        & 5821                     & 85.9                   & 5869   &                       &                       \\
+                                                                   & Mahalanobis             & 88.1                        & 5455                     & 86.7                   & 5629   &                       &                       \\
+                                                                   & std deviation           & 78.7                        & 5539                     & 83.3                   & 5780   &                       &                       \\
+               \noalign{\smallskip}\hline
        \end{tabular}
 \end{table*}
 
@@ -459,10 +488,10 @@ However, this effect is balanced with the fact that steepest slope direction all
        \centering
        \begin{tabular}{rcccc}
                \hline\noalign{\smallskip}
-               zone & 1 & 2 & 3 & 4\\
+               zone      & 1     & 2     & 3     & 4    \\
                \noalign{\smallskip}\hline\noalign{\smallskip}
-               surface 1 & 1.44 & 4.49 & 1.45 & 6.04 \\
-               surface 2 & 26.25 & 60.39 & 26.10 & ~ \\
+               surface 1 & 1.44  & 4.49  & 1.45  & 6.04 \\
+               surface 2 & 26.25 & 60.39 & 26.10 & ~    \\
                \noalign{\smallskip}\hline
        \end{tabular}
 \end{table}
@@ -477,9 +506,9 @@ Using PCA based metric can be interesting since it tries to align the steepest s
        \centering
        \begin{tabular}{rcccc}
                \hline\noalign{\smallskip}
-               zone & 1 & 2 & 3 & 4 \\
+               zone             & 1                    & 2                    & 3                    & 4                    \\
                \noalign{\smallskip}\hline\noalign{\smallskip}
-               Euclidean metric& \unit{62.0}{\degree} & \unit{90.3}{\degree} & \unit{62.3}{\degree} & \unit{89.9}{\degree} \\
+               Euclidean metric & \unit{62.0}{\degree} & \unit{90.3}{\degree} & \unit{62.3}{\degree} & \unit{89.9}{\degree} \\
                PCA-based metric & \unit{60.5}{\degree} & \unit{73.1}{\degree} & \unit{18.5}{\degree} & \unit{81.3}{\degree} \\
                \noalign{\smallskip}\hline\noalign{\smallskip}
        \end{tabular}
@@ -507,7 +536,7 @@ The hierarchical clustering algorithm partitioned the first surface with more zo
        \centering
        \begin{tabular}{rcccc}
                \hline\noalign{\smallskip}
-               zone & 1 & 2 & 3 & 4 \\
+               zone             & 1    & 2    & 3    & 4     \\
                \noalign{\smallskip}\hline\noalign{\smallskip}
                Euclidean metric & 1.44 & 4.49 & 1.45 & 6.04  \\
                PCA based metric & 1.80 & 5.00 & 1.38 & 10.09 \\
@@ -528,7 +557,7 @@ K-means algorithm results in partitions with generally smooth borders. The numbe
 
 Due to its randomness RPCL algorithm allows to explore efficiently different solutions, However it requires more parameter tuning, these parameters control the convergence rate of the algorithm. An upper bound of the number of clusters needs to be provided. Compared to K-means, additional stopping criteria need to be defined otherwise it may take a lot of time until convergence (fixed partition with no more changes) is reached. The basic version of RPCL does not allow the use of some metrics that contains global informations about clusters (such as PCA based metric). Thus, an assignment step is added to RPCL allowing the use of such metrics. The computational time slightly increased but remains less than its K-means counter-part.
 
-When the Hierarchical Clustering is used, no prior knowledge about the number of clusters is needed. In fact, the number of clusters decreases by one after each iteration and the number of clusters is found according to the stopping ciretia, that are defined by the user. the borders between zones are less smooth when using HC algorithm compared to K-means or RPCL, and the number of zones tends to increase as the meshing gets finer. For a given surface, HC can give an idea about the number of clusters to be used in another classification algorithm, especially if the user needs to use custommized metrics. Indeed, the metrics used for K-means and RPCL cannot be used for HC, since the distance between to clusters is evaluated. The computational time associated to HC increases with the size of meshing faster than RPCL and K-means. For the mesh size used in this study ($80\times80$), the comptutational time associated to HC was between 1 and 2 minutes while K-means and RPCL took less than 3 seconds.  
+When the Hierarchical Clustering is used, no prior knowledge about the number of clusters is needed. In fact, the number of clusters decreases by one after each iteration and the number of clusters is found according to the stopping ciretia, that are defined by the user. the borders between zones are less smooth when using HC algorithm compared to K-means or RPCL, and the number of zones tends to increase as the meshing gets finer. For a given surface, HC can give an idea about the number of clusters to be used in another classification algorithm, especially if the user needs to use custommized metrics. Indeed, the metrics used for K-means and RPCL cannot be used for HC, since the distance between to clusters is evaluated. The computational time associated to HC increases with the size of meshing faster than RPCL and K-means. For the mesh size used in this study ($80\times80$), the comptutational time associated to HC was between 1 and 2 minutes while K-means and RPCL took less than 3 seconds.
 
 Several metrics were proposed in this study, the basic one is the Euclidean distance in the features space. Features are of two types: proximity parameters ($u, v$) and machinability parameters ($s, \theta$). This metric is extended using PCA to take in account the elongation of zones using global information from covariance matrices. This is done in order to improve the kinematic response of the machineand thus reduce the machining time. Other metrics widely used in statistics were tested: The Mahalanobis distance which is useful to treat correlated data in statistics and standard deviation based distance that is equivalent to Euclidean distance where each term is normalized by its standard deviation.
 
@@ -595,55 +624,55 @@ This work is only a first approach to improve machining time in the case of mill
 \label{sec:app1}
 \subsection{Mesh addition case}\label{sec:appA1}
 
-Let $n\in\mathbb{N}$ be an integer, $(x_i)_{1\leq i\leq n}\in\mathbb{R}^n$ a sample of real values of mean $\mbox{E}_n$ and variance $\mbox{Var}_n$. Let $x_{n+1}\in\mathbb{R}$ be a new real, we seek to calculate the mean $\mbox{E}_{n+1}$ and the variance $\mbox{Var}_{n+1}$ of the sample $(x_i)_{1\leq i\leq n+1}$ from $\mbox{E}_n$ et $\mbox{Var}_n$:
+Let $n\in\mathbb{N}$ be an integer, $(x_i)_{1\leq i\leq n}\in\mathbb{R}^n$ a sample of real values of mean $\mbox{E}_n$ and variance $\var_n$. Let $x_{n+1}\in\mathbb{R}$ be a new real, we seek to calculate the mean $\mbox{E}_{n+1}$ and the variance $\var_{n+1}$ of the sample $(x_i)_{1\leq i\leq n+1}$ from $\mbox{E}_n$ et $\var_n$:
 \begin{equation}
-\begin{split}
-\mbox{E}_{n+1}&=\frac{1}{n+1}\sum_{i=1}^{n+1} x_i=\frac{1}{n+1}\left(\sum_{i=1}^{n}{x_i} + x_{i+1}\right)\\
- &=\frac{n}{n+1}\mbox{E}_n + \frac{x_{n+1}}{n+1}
-\end{split}
-\label{addmean}
+       \begin{split}
+               \mbox{E}_{n+1}&=\frac{1}{n+1}\sum_{i=1}^{n+1} x_i=\frac{1}{n+1}\left(\sum_{i=1}^{n}{x_i} + x_{i+1}\right)\\
              &=\frac{n}{n+1}\mbox{E}_n + \frac{x_{n+1}}{n+1}
+       \end{split}
+       \label{addmean}
 \end{equation}
 As for the variance:
 \begin{equation*}
\mbox{Var}_n=\frac{1}{n}\sum_{i=1}^{n} x_i^2 - \mbox{E}_n^2
      \var_n=\frac{1}{n}\sum_{i=1}^{n} x_i^2 - \mbox{E}_n^2
 \end{equation*}
 Using the last equation, it is straightforward that:
 \begin{equation}
- \begin{split}
-  \mbox{Var}_{n+1}&=\frac{1}{n+1}\sum_{i=1}^{n+1} x_i^2 - \mbox{E}_{n+1}^2=\frac{n}{n+1}\sum_{i=1}^n{\frac{x_i^2}{n}}+\frac{x_{n+1}^2}{n+1}-\mbox{E}_{n+1}^2\\
-   &=\frac{n}{n+1}\left(\mbox{Var}_n+\mbox{E}_n^2\right)+\frac{x_{n+1}^2}{n+1}-\left(\frac{n}{n+1}\mbox{E}_n + \frac{x_{n+1}}{n+1}\right)^2
- \end{split}
- \label{addvar}
      \begin{split}
+               \var_{n+1}&=\frac{1}{n+1}\sum_{i=1}^{n+1} x_i^2 - \mbox{E}_{n+1}^2=\frac{n}{n+1}\sum_{i=1}^n{\frac{x_i^2}{n}}+\frac{x_{n+1}^2}{n+1}-\mbox{E}_{n+1}^2\\
+               &=\frac{n}{n+1}\left(\var_n+\mbox{E}_n^2\right)+\frac{x_{n+1}^2}{n+1}-\left(\frac{n}{n+1}\mbox{E}_n + \frac{x_{n+1}}{n+1}\right)^2
      \end{split}
      \label{addvar}
 \end{equation}
 
-A similar equation can be found for the covariance of two variables: Let $(x_i)_{1\leq i\leq n}\in\mathbb{R}^n$ and $(y_i)_{1\leq i\leq n}\in\mathbb{R}^n$ be two real samples of means $\mbox{E}_{x,n}$ et $\mbox{E}_{y,n}$ respectively, we denote $\mbox{Cov}_n$ their covariance:
+A similar equation can be found for the covariance of two variables: Let $(x_i)_{1\leq i\leq n}\in\mathbb{R}^n$ and $(y_i)_{1\leq i\leq n}\in\mathbb{R}^n$ be two real samples of means $\mbox{E}_{x,n}$ et $\mbox{E}_{y,n}$ respectively, we denote $\cov_n$ their covariance:
 \begin{equation*}
\mbox{Cov}_n=\frac{1}{n}\sum_{i=1}^n {x_iy_i} - \mbox{E}_{x,n}\mbox{E}_{y,n}
      \cov_n=\frac{1}{n}\sum_{i=1}^n {x_iy_i} - \mbox{E}_{x,n}\mbox{E}_{y,n}
 \end{equation*}
-Hence, the covariance $\mbox{Cov}_{n+1}$ of samples $(x_i)_{1\leq i\leq n+1}$ and $(y_i)_{1\leq i\leq n+1}$ is written:
+Hence, the covariance $\cov_{n+1}$ of samples $(x_i)_{1\leq i\leq n+1}$ and $(y_i)_{1\leq i\leq n+1}$ is written:
 \begin{equation}
- \begin{split}
-  \mbox{Cov}_{n+1}&=\frac{1}{n+1}\sum_{i=1}^{n+1}{x_iy_i} - \mbox{E}_{x,n+1}\mbox{E}_{y,n+1} \\
-  &=\frac{n}{n+1}\sum_{i=1}^{n}{\frac{x_iy_i}{n}} + \frac{x_{n+1}y_{n+1}}{n+1} - \mbox{E}_{x,n+1}\mbox{E}_{y,n+1} \\
-   &=\frac{n}{n+1}\left(\mbox{Cov}_n+\mbox{E}_{x,n}\mbox{E}_{y,n}\right)+\frac{x_{n+1}y_{n+1}}{n+1} \\
-   &- \left(\frac{n}{n+1}\mbox{E}_{x,n} + \frac{x_{n+1}}{n+1}\right)\left(\frac{n}{n+1}\mbox{E}_{y,n} + \frac{x_{n+1}}{n+1}\right)
- \end{split}
- \label{addcov}
      \begin{split}
+               \cov_{n+1}&=\frac{1}{n+1}\sum_{i=1}^{n+1}{x_iy_i} - \mbox{E}_{x,n+1}\mbox{E}_{y,n+1} \\
+               &=\frac{n}{n+1}\sum_{i=1}^{n}{\frac{x_iy_i}{n}} + \frac{x_{n+1}y_{n+1}}{n+1} - \mbox{E}_{x,n+1}\mbox{E}_{y,n+1} \\
+               &=\frac{n}{n+1}\left(\cov_n+\mbox{E}_{x,n}\mbox{E}_{y,n}\right)+\frac{x_{n+1}y_{n+1}}{n+1} \\
+               &- \left(\frac{n}{n+1}\mbox{E}_{x,n} + \frac{x_{n+1}}{n+1}\right)\left(\frac{n}{n+1}\mbox{E}_{y,n} + \frac{x_{n+1}}{n+1}\right)
      \end{split}
      \label{addcov}
 \end{equation}
 
-From the scalar equations \ref{addmean}, \ref{addvar}, \ref{addcov} we can derive the matrix equation that enabeling the covariance marix update of a vectors sample. Let $p\in\mathbb{N}^*$ be the dimension of vectors, $n\in\mathbb{N}$ their number, $(\mathbf{X}_i)_{1\leq i\leq n}\in\left(\mathbb{R}^p\right)^n$ the sample of vectors of $\mathbb{R}^p$. The mean of the sample is denoted $\mathbf{E}_n$ while $\Sigma_n$ denotes its covariance matrix: 
+From the scalar equations \ref{addmean}, \ref{addvar}, \ref{addcov} we can derive the matrix equation that enabeling the covariance marix update of a vectors sample. Let $p\in\mathbb{N}^*$ be the dimension of vectors, $n\in\mathbb{N}$ their number, $(\mathbf{X}_i)_{1\leq i\leq n}\in\left(\mathbb{R}^p\right)^n$ the sample of vectors of $\mathbb{R}^p$. The mean of the sample is denoted $\mathbf{E}_n$ while $\Sigma_n$ denotes its covariance matrix:
 \begin{equation*}
\forall (k,l)\in\{1, \dots,p\}^2,\ \left(\Sigma_n\right)_{kl}=\mbox{Cov}\left(\left(\mathbf{X}_i\right)_k,\left(\mathbf{X}_i\right)_l\right)
      \forall (k,l)\in\{1, \dots,p\}^2,\ \left(\Sigma_n\right)_{kl}=\cov\left(\left(\mathbf{X}_i\right)_k,\left(\mathbf{X}_i\right)_l\right)
 \end{equation*}
 where $\left(\mathbf{X}_i\right)_k$ denotes the scalar sample defined by the $k$-th component of vectors $\mathbf{X}_i$.
 
 Let $\mathbf{X}_{n+1}\in\mathbb{R}^p$ be a new vector to be added to the sample, the covariance matrix of the augmented sample $\left(\mathbf{X}_i\right)_{1\leq i\leq n+1}$ is written:
 \begin{equation}
-\begin{split}
- \Sigma_{n+1}&=\frac{n}{n+1}\left(\Sigma_n+\mathbf{E}_n\mathbf{E}_n^T\right)+\frac{\mathbf{X}_{n+1}\mathbf{X}_{n+1}^T}{n+1} \\
- &-\left(\frac{n}{n+1}\mathbf{E}_n+\frac{\mathbf{X}_{n+1}}{n+1}\right)\left(\frac{n}{n+1}\mathbf{E}_n+\frac{\mathbf{X}_{n+1}}{n+1}\right)^T
- \label{addcovar}
-\end{split}
+       \begin{split}
              \Sigma_{n+1}&=\frac{n}{n+1}\left(\Sigma_n+\mathbf{E}_n\mathbf{E}_n^T\right)+\frac{\mathbf{X}_{n+1}\mathbf{X}_{n+1}^T}{n+1} \\
              &-\left(\frac{n}{n+1}\mathbf{E}_n+\frac{\mathbf{X}_{n+1}}{n+1}\right)\left(\frac{n}{n+1}\mathbf{E}_n+\frac{\mathbf{X}_{n+1}}{n+1}\right)^T
              \label{addcovar}
+       \end{split}
 \end{equation}
 
 Equation \ref{addcovar} enables the update of covariance matrix $\Sigma_{n+1}$ of a zone (cluster) that initially contains $n$ meshes of feature vectors $\left(\mathbf{X}_i\right)_{1\leq i\leq n}$ (and covariance matrix $\Sigma_n$), after the addition of a new mesh which feature vector is $\mathbf{X}_{n+1}$.
@@ -651,44 +680,44 @@ Equation \ref{addcovar} enables the update of covariance matrix $\Sigma_{n+1}$ o
 
 In this case, empty zones are not treated since there is nothing to remove. Also, zones containing a single mesh are not treated since it becomes empty after removing the mesh and the covariance matrix is null. In what follows we suppose $n\geq2$:
 
-Let $(x_i)_{1\leq i\leq n}\in\mathbb{R}^n$ a scalar sample of means $\mbox{E}_n$ and variance $\mbox{Var}_n$, we seek to calculate the mean $\mbox{E}_{n-1}$ and the variance $\mbox{Var}_{n-1}$ of the sample $(x_i)_{1\leq i\leq n-1}$ from $\mbox{E}_n$ et $\mbox{Var}_n$~:
+Let $(x_i)_{1\leq i\leq n}\in\mathbb{R}^n$ a scalar sample of means $\mbox{E}_n$ and variance $\var_n$, we seek to calculate the mean $\mbox{E}_{n-1}$ and the variance $\var_{n-1}$ of the sample $(x_i)_{1\leq i\leq n-1}$ from $\mbox{E}_n$ et $\var_n$~:
 \begin{equation}
- \begin{split}
-  \mbox{E}_{n-1}&=\frac{1}{n-1}\sum_{i=1}^{n-1} x_i=\frac{1}{n-1}\left(\sum_{i=1}^n{x_i} - x_n\right) \\
-   &=\frac{n}{n-1}\mbox{E}_n - \frac{x_n}{n-1}
- \end{split}
- \label{removemean}
      \begin{split}
+               \mbox{E}_{n-1}&=\frac{1}{n-1}\sum_{i=1}^{n-1} x_i=\frac{1}{n-1}\left(\sum_{i=1}^n{x_i} - x_n\right) \\
+               &=\frac{n}{n-1}\mbox{E}_n - \frac{x_n}{n-1}
      \end{split}
      \label{removemean}
 \end{equation}
 As for the variance:
 \begin{equation}
- \begin{split}
-  \mbox{Var}_{n-1}&=\frac{1}{n-1}\sum_{i=1}^{n-1}{x_i^2}-\mbox{E}_{n-1}^2=\frac{n}{n-1}\sum_{i=1}^n{x_i^2}-\frac{x_n^2}{n-1}-\mbox{E}^2_{n-1}\\
-   &=\frac{n}{n-1}\left(\mbox{Var}_n+\mbox{E}_n^2\right)-\frac{x_n^2}{n-1}-\left(\frac{n}{n-1}\mbox{E}_n - \frac{x_n}{n-1}\right)^2
- \end{split}
- \label{removevar}
      \begin{split}
+               \var_{n-1}&=\frac{1}{n-1}\sum_{i=1}^{n-1}{x_i^2}-\mbox{E}_{n-1}^2=\frac{n}{n-1}\sum_{i=1}^n{x_i^2}-\frac{x_n^2}{n-1}-\mbox{E}^2_{n-1}\\
+               &=\frac{n}{n-1}\left(\var_n+\mbox{E}_n^2\right)-\frac{x_n^2}{n-1}-\left(\frac{n}{n-1}\mbox{E}_n - \frac{x_n}{n-1}\right)^2
      \end{split}
      \label{removevar}
 \end{equation}
-A similar equation can be found for the covariance of two variables: Let $(x_i)_{1\leq i\leq n}\in\mathbb{R}^n$ and $(y_i)_{1\leq i\leq n}\in\mathbb{R}^n$ be two scalar samples of means $\mbox{E}_{x,n}$ and $\mbox{E}_{y,n}$ respectively, $\mbox{Cov}_n$ denotes their covariance:
+A similar equation can be found for the covariance of two variables: Let $(x_i)_{1\leq i\leq n}\in\mathbb{R}^n$ and $(y_i)_{1\leq i\leq n}\in\mathbb{R}^n$ be two scalar samples of means $\mbox{E}_{x,n}$ and $\mbox{E}_{y,n}$ respectively, $\cov_n$ denotes their covariance:
 \begin{equation*}
\mbox{Cov}_n=\frac{1}{n}\sum_{i=1}^n {x_iy_i} - \mbox{E}_{x,n}\mbox{E}_{y,n}
      \cov_n=\frac{1}{n}\sum_{i=1}^n {x_iy_i} - \mbox{E}_{x,n}\mbox{E}_{y,n}
 \end{equation*}
-Hence, the covariance $\mbox{Cov}_{n-1}$ of variables $(x_i)_{1\leq i\leq n-1}$ et $(y_i)_{1\leq i\leq n-1}$ is written:
+Hence, the covariance $\cov_{n-1}$ of variables $(x_i)_{1\leq i\leq n-1}$ et $(y_i)_{1\leq i\leq n-1}$ is written:
 \begin{equation}
- \begin{split}
-  \mbox{Cov}_{n-1}&=\frac{1}{n-1}\sum_{i=1}^{n-1}{x_iy_i} - \mbox{E}_{x,n-1}\mbox{E}_{y,n-1}\\
-  & =\frac{n}{n-1}\sum_{i=1}^{n}{\frac{x_iy_i}{n}} - \frac{x_ny_n}{n-1} - \mbox{E}_{x,n-1}\mbox{E}_{y,n-1} \\
-  & =\frac{n}{n-1}\left(\mbox{Cov}_n+\mbox{E}_{x,n}\mbox{E}_{y,n}\right)-\frac{x_ny_n}{n-1} \\
-  &- \left(\frac{n}{n-1}\mbox{E}_{x,n} - \frac{x_n}{n-1}\right)\left(\frac{n}{n-1}\mbox{E}_{y,n} - \frac{x_n}{n-1}\right)
- \end{split}
- \label{removecov}
      \begin{split}
+               \cov_{n-1}&=\frac{1}{n-1}\sum_{i=1}^{n-1}{x_iy_i} - \mbox{E}_{x,n-1}\mbox{E}_{y,n-1}\\
+               & =\frac{n}{n-1}\sum_{i=1}^{n}{\frac{x_iy_i}{n}} - \frac{x_ny_n}{n-1} - \mbox{E}_{x,n-1}\mbox{E}_{y,n-1} \\
+               & =\frac{n}{n-1}\left(\cov_n+\mbox{E}_{x,n}\mbox{E}_{y,n}\right)-\frac{x_ny_n}{n-1} \\
+               &- \left(\frac{n}{n-1}\mbox{E}_{x,n} - \frac{x_n}{n-1}\right)\left(\frac{n}{n-1}\mbox{E}_{y,n} - \frac{x_n}{n-1}\right)
      \end{split}
      \label{removecov}
 \end{equation}
 
 Using scalar equations \ref{removemean}, \ref{removevar} and \ref{removecov}, we can find a matrix equation to update the covariance matrix in the case of vectors samples. Let $p\in\mathbb{N}^*$ be the dimension of vectors, $n\geq2$ their number and $(\mathbf{X}_i)_{1\leq i\leq n}\in\left(\mathbb{R}^p\right)^n$ a sample of vectors of $\mathbb{R}^p$. $\mathbf{E}_n$ denotes the mean vector of the sample while $\Sigma_n$ denotes its covariance matrix. Thus, the covariance matrix of the reduced sample $\left(\mathbf{X}_i\right)_{1\leq i\leq n-1}$ is written:
 \begin{equation}
-\begin{split}
- \Sigma_{n-1}&=\frac{n}{n-1}\left(\Sigma_n+\mathbf{E}_n\mathbf{E}_n^T\right)-\frac{\mathbf{X}_n\mathbf{X}_n^T}{n-1} \\
- &-\left(\frac{n}{n-1}\mathbf{E}_n-\frac{\mathbf{X}_n}{n-1}\right)\left(\frac{n}{n-1}\mathbf{E}_n-\frac{\mathbf{X}_n}{n-1}\right)^T
-\end{split}
-\label{removecovar}
+       \begin{split}
              \Sigma_{n-1}&=\frac{n}{n-1}\left(\Sigma_n+\mathbf{E}_n\mathbf{E}_n^T\right)-\frac{\mathbf{X}_n\mathbf{X}_n^T}{n-1} \\
              &-\left(\frac{n}{n-1}\mathbf{E}_n-\frac{\mathbf{X}_n}{n-1}\right)\left(\frac{n}{n-1}\mathbf{E}_n-\frac{\mathbf{X}_n}{n-1}\right)^T
+       \end{split}
+       \label{removecovar}
 \end{equation}
 
 Equation \ref{removecovar} enables to update the covariance matrix $\Sigma_{n-1}$ of a zone containing initially $n$ meshes of feature-vectors $\left(\mathbf{X}_i\right)_{1\leq i\leq n}$ (and covariance matrix $\Sigma_n$), after removing the $n$-th mesh which feature-vector is $\mathbf{X}_n$.
@@ -701,8 +730,8 @@ Notes et remarques :
 
 Attic:
 
-This metric takes both local information from mesh points and global information of clusters into consideration, which improves the efficiency of machining. 
-       
+This metric takes both local information from mesh points and global information of clusters into consideration, which improves the efficiency of machining.
+
 
 
 
index 535119a..efead08 100644 (file)
Binary files a/Publis/JIM2020/v1.0/pcametric.pdf and b/Publis/JIM2020/v1.0/pcametric.pdf differ
index 17e5064..8b0bcb1 100644 (file)
@@ -1,4 +1,4 @@
-%% Creator: Inkscape inkscape 0.92.4, www.inkscape.org
+%% Creator: Inkscape 1.0 (4035a4fb49, 2020-05-01), www.inkscape.org
 %% PDF/EPS/PS + LaTeX output extension by Johan Engelen, 2010
 %% Accompanies image file 'pcametric.pdf' (pdf, eps, ps)
 %%
@@ -38,7 +38,7 @@
   \newcommand*\fsize{\dimexpr\f@size pt\relax}%
   \newcommand*\lineheight[1]{\fontsize{\fsize}{#1\fsize}\selectfont}%
   \ifx\svgwidth\undefined%
-    \setlength{\unitlength}{347.2458895bp}%
+    \setlength{\unitlength}{349.32983158bp}%
     \ifx\svgscale\undefined%
       \relax%
     \else%
   \global\let\svgwidth\undefined%
   \global\let\svgscale\undefined%
   \makeatother%
-  \begin{picture}(1,0.51763876)%
+  \begin{picture}(1,0.55427279)%
     \lineheight{1}%
     \setlength\tabcolsep{0pt}%
     \put(0,0){\includegraphics[width=\unitlength,page=1]{pcametric.pdf}}%
-    \put(0.1078376,0.08686559){\color[rgb]{0,0,0}\makebox(0,0)[lt]{\begin{minipage}{0.17462618\unitlength}\raggedright $\mathbf{X_m}$\end{minipage}}}%
-    \put(0.04366214,0.12156232){\color[rgb]{0,0,0}\makebox(0,0)[lt]{\lineheight{1.25}\smash{\begin{tabular}[t]{l}$\mathbf{Y_m}$\\\end{tabular}}}}%
-    \put(0.17005979,0.22447257){\color[rgb]{0,0,0}\makebox(0,0)[lt]{\begin{minipage}{0.42577664\unitlength}\raggedright center of zone \end{minipage}}}%
-    \put(0.65584218,0.11415867){\color[rgb]{0,0,0}\makebox(0,0)[lt]{\lineheight{1.25}\smash{\begin{tabular}[t]{l}evaluated mesh\end{tabular}}}}%
+    \put(0.09918221,0.07585805){\color[rgb]{0,0,0}\makebox(0,0)[lt]{\begin{minipage}{0.27256645\unitlength}\raggedright $\mathbf{X_m}$\end{minipage}}}%
+    \put(0.0379588,0.14904652){\color[rgb]{0,0,0}\makebox(0,0)[lt]{\lineheight{1.25}\smash{\begin{tabular}[t]{l}$\mathbf{Y_m}$\\\end{tabular}}}}%
+    \put(0.21843882,0.25401471){\color[rgb]{0,0,0}\makebox(0,0)[lt]{\begin{minipage}{0.24099056\unitlength}\raggedright $c_k$ centroid\end{minipage}}}%
     \put(0,0){\includegraphics[width=\unitlength,page=2]{pcametric.pdf}}%
-    \put(0.78411304,0.4201373){\color[rgb]{0,0,0}\makebox(0,0)[lt]{\begin{minipage}{0.20462696\unitlength}\raggedright principal direction\end{minipage}}}%
-    \put(0.64636186,0.50517077){\color[rgb]{0,0,0}\makebox(0,0)[lt]{\begin{minipage}{0.30757598\unitlength}\raggedright steepest slope direction\end{minipage}}}%
-    \put(0,0){\includegraphics[width=\unitlength,page=3]{pcametric.pdf}}%
-    \put(0.67838552,0.30972197){\color[rgb]{0,0,0}\makebox(0,0)[lt]{\begin{minipage}{0.10040705\unitlength}\raggedright $\theta_I$\end{minipage}}}%
-    \put(0.63450228,0.20449372){\color[rgb]{0,0,0}\makebox(0,0)[lt]{\begin{minipage}{0.14362016\unitlength}\raggedright $\beta_{ik}$\end{minipage}}}%
-    \put(0.54673168,0.35047973){\color[rgb]{0,0,0}\makebox(0,0)[lt]{\begin{minipage}{0.4664478\unitlength}\raggedright $\theta_k$\end{minipage}}}%
+    \put(0.67836596,0.4589226){\color[rgb]{0,0,0}\makebox(0,0)[lt]{\begin{minipage}{0.28550064\unitlength}\raggedright principal direction\end{minipage}}}%
+    \put(0.48251354,0.5176353){\color[rgb]{0,0,0}\makebox(0,0)[lt]{\begin{minipage}{0.38307417\unitlength}\raggedright steepest slope direction\end{minipage}}}%
+    \put(0.65016056,0.22496505){\color[rgb]{0,0,0}\makebox(0,0)[lt]{\lineheight{1.25}\smash{\begin{tabular}[t]{l}$\beta_{i\,k}$\end{tabular}}}}%
+    \put(0.67636636,0.31849084){\color[rgb]{0,0,0}\makebox(0,0)[lt]{\lineheight{1.25}\smash{\begin{tabular}[t]{l}$\theta_l$\end{tabular}}}}%
+    \put(0.55558863,0.36855993){\color[rgb]{0,0,0}\makebox(0,0)[lt]{\lineheight{1.25}\smash{\begin{tabular}[t]{l}$\theta_k$\end{tabular}}}}%
+    \put(0.51372531,0.1404651){\color[rgb]{0,0,0}\makebox(0,0)[lt]{\lineheight{1.25}\smash{\begin{tabular}[t]{l}evaluated mesh unit: $m_i$\end{tabular}}}}%
   \end{picture}%
 \endgroup%
index c44c166..76396d3 100644 (file)
@@ -1,6 +1,4 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
 <svg
    xmlns:dc="http://purl.org/dc/elements/1.1/"
    xmlns:cc="http://creativecommons.org/ns#"
    xmlns="http://www.w3.org/2000/svg"
    xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
    xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="122.50063mm"
-   height="63.411076mm"
-   viewBox="0 0 122.50063 63.411075"
-   version="1.1"
-   id="svg8"
+   inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
    sodipodi:docname="pcametric.svg"
-   inkscape:version="0.92.4 (5da689c313, 2019-01-14)">
+   id="svg8"
+   version="1.1"
+   viewBox="0 0 123.2358 68.306249"
+   height="68.306252mm"
+   width="123.2358mm">
   <defs
      id="defs2">
     <inkscape:path-effect
-       effect="spiro"
+       lpeversion="0"
+       is_visible="true"
        id="path-effect23413"
-       is_visible="true" />
+       effect="spiro" />
     <inkscape:path-effect
-       effect="spiro"
+       lpeversion="0"
+       is_visible="true"
        id="path-effect23373"
-       is_visible="true" />
+       effect="spiro" />
     <inkscape:path-effect
-       effect="spiro"
+       lpeversion="0"
+       is_visible="true"
        id="path-effect23361"
-       is_visible="true" />
+       effect="spiro" />
     <inkscape:path-effect
-       effect="spiro"
+       lpeversion="0"
+       is_visible="true"
        id="path-effect23357"
-       is_visible="true" />
+       effect="spiro" />
     <inkscape:path-effect
-       effect="bspline"
-       id="path-effect23351"
-       is_visible="true"
-       weight="33.333333"
-       steps="2"
-       helper_size="0"
-       apply_no_weight="true"
+       lpeversion="0"
+       only_selected="false"
        apply_with_weight="true"
-       only_selected="false" />
-    <inkscape:path-effect
-       effect="bspline"
-       id="path-effect23347"
-       is_visible="true"
-       weight="33.333333"
-       steps="2"
-       helper_size="0"
        apply_no_weight="true"
+       helper_size="0"
+       steps="2"
+       weight="33.333333"
+       is_visible="true"
+       id="path-effect23351"
+       effect="bspline" />
+    <inkscape:path-effect
+       lpeversion="0"
+       only_selected="false"
        apply_with_weight="true"
-       only_selected="false" />
+       apply_no_weight="true"
+       helper_size="0"
+       steps="2"
+       weight="33.333333"
+       is_visible="true"
+       id="path-effect23347"
+       effect="bspline" />
     <marker
-       inkscape:stockid="Arrow1Mend"
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="Arrow1Mend"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path4732" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
        orient="auto"
        refY="0"
        refX="0"
-       id="Arrow1Mend"
+       id="marker21819"
        style="overflow:visible"
        inkscape:isstock="true">
       <path
-         id="path4732"
+         inkscape:connector-curvature="0"
+         id="path21817"
          d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.4,0,0,-0.4,-4,0)"
-         inkscape:connector-curvature="0" />
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
     </marker>
     <marker
-       inkscape:isstock="true"
-       style="overflow:visible"
-       id="marker21819"
-       refX="0"
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
        refY="0"
+       refX="0"
+       id="marker21677"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path21675"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
        orient="auto"
-       inkscape:stockid="Arrow1Mstart">
+       refY="0"
+       refX="0"
+       id="marker21619"
+       style="overflow:visible"
+       inkscape:isstock="true">
       <path
-         transform="matrix(0.4,0,0,0.4,4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         inkscape:connector-curvature="0"
+         id="path21617"
          d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path21817"
-         inkscape:connector-curvature="0" />
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
     </marker>
     <marker
        inkscape:isstock="true"
        style="overflow:visible"
-       id="marker21677"
+       id="Arrow1Send"
        refX="0"
        refY="0"
        orient="auto"
-       inkscape:stockid="Arrow1Mstart">
+       inkscape:stockid="Arrow1Send">
       <path
-         transform="matrix(0.4,0,0,0.4,4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.2,0,0,-0.2,-1.2,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
          d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path21675"
-         inkscape:connector-curvature="0" />
+         id="path4738" />
     </marker>
     <marker
+       inkscape:collect="always"
        inkscape:isstock="true"
        style="overflow:visible"
-       id="marker21619"
+       id="Arrow1Mstart"
        refX="0"
        refY="0"
        orient="auto"
        inkscape:stockid="Arrow1Mstart">
       <path
+         inkscape:connector-curvature="0"
          transform="matrix(0.4,0,0,0.4,4,0)"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
          d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         id="path21617"
-         inkscape:connector-curvature="0" />
+         id="path4729" />
     </marker>
     <marker
-       inkscape:stockid="Arrow1Send"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow1Send"
+       inkscape:isstock="true"
        style="overflow:visible"
-       inkscape:isstock="true">
-      <path
-         id="path4738"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(-0.2,0,0,-0.2,-1.2,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
+       id="Arrow1Lstart"
        refX="0"
-       id="Arrow1Mstart"
-       style="overflow:visible"
-       inkscape:isstock="true"
-       inkscape:collect="always">
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Lstart">
       <path
-         id="path4729"
+         inkscape:connector-curvature="0"
+         transform="matrix(0.8,0,0,0.8,10,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
          d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)"
-         inkscape:connector-curvature="0" />
+         id="path4723" />
     </marker>
     <marker
-       inkscape:stockid="Arrow1Lstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow1Lstart"
+       inkscape:collect="always"
+       inkscape:isstock="true"
        style="overflow:visible"
-       inkscape:isstock="true">
+       id="Arrow1Mstart-3"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mstart">
       <path
-         id="path4723"
+         transform="matrix(0.4,0,0,0.4,4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
          d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.8,0,0,0.8,10,0)"
+         id="path4729-5"
          inkscape:connector-curvature="0" />
     </marker>
     <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow1Mstart-3"
-       style="overflow:visible"
        inkscape:isstock="true"
-       inkscape:collect="always">
-      <path
-         inkscape:connector-curvature="0"
-         id="path4729-5"
-         d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow1Mstart-3-2"
        style="overflow:visible"
-       inkscape:isstock="true">
+       id="Arrow1Mstart-3-2"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mstart">
       <path
-         inkscape:connector-curvature="0"
-         id="path4729-5-9"
+         transform="matrix(0.4,0,0,0.4,4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
          d="M 0,0 5,-5 -12.5,0 5,5 Z"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
+         id="path4729-5-9"
+         inkscape:connector-curvature="0" />
     </marker>
     <inkscape:path-effect
-       effect="spiro"
+       lpeversion="0"
+       is_visible="true"
        id="path-effect23373-3"
-       is_visible="true" />
+       effect="spiro" />
     <inkscape:path-effect
-       effect="spiro"
+       lpeversion="0"
+       is_visible="true"
        id="path-effect23373-9"
-       is_visible="true" />
+       effect="spiro" />
   </defs>
   <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="2.54"
-     inkscape:cx="314.47406"
-     inkscape:cy="110.41667"
-     inkscape:document-units="mm"
-     inkscape:current-layer="layer1"
-     showgrid="false"
-     inkscape:window-width="1920"
-     inkscape:window-height="1015"
-     inkscape:window-x="0"
-     inkscape:window-y="0"
-     inkscape:window-maximized="1"
-     fit-margin-top="5"
-     fit-margin-right="5"
+     inkscape:snap-object-midpoints="true"
+     inkscape:document-rotation="0"
+     fit-margin-bottom="5"
      fit-margin-left="5"
-     fit-margin-bottom="5" />
+     fit-margin-right="5"
+     fit-margin-top="5"
+     inkscape:window-maximized="1"
+     inkscape:window-y="0"
+     inkscape:window-x="0"
+     inkscape:window-height="1159"
+     inkscape:window-width="1600"
+     showgrid="false"
+     inkscape:current-layer="layer1"
+     inkscape:document-units="mm"
+     inkscape:cy="107.3728"
+     inkscape:cx="223.39568"
+     inkscape:zoom="1.6822127"
+     inkscape:pageshadow="2"
+     inkscape:pageopacity="0.0"
+     borderopacity="1.0"
+     bordercolor="#666666"
+     pagecolor="#ffffff"
+     id="base" />
   <metadata
      id="metadata5">
     <rdf:RDF>
         <dc:format>image/svg+xml</dc:format>
         <dc:type
            rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title />
+        <dc:title></dc:title>
       </cc:Work>
     </rdf:RDF>
   </metadata>
   <g
-     inkscape:label="Calque 1"
-     inkscape:groupmode="layer"
+     transform="translate(-48.720356,-89.408784)"
      id="layer1"
-     transform="translate(-51.973218,-91.065758)">
+     inkscape:groupmode="layer"
+     inkscape:label="Calque 1">
     <ellipse
-       id="path3713"
-       cx="46.658016"
-       cy="150.37692"
-       rx="32.52301"
-       ry="11.902037"
-       style="opacity:1;fill:#00c3ff;fill-opacity:1;stroke-width:0.15354042"
-       transform="rotate(-20)" />
+       transform="matrix(0.90351147,-0.4285639,0.26899255,0.96314226,0,0)"
+       style="opacity:1;fill:#00c1ff;fill-opacity:1;stroke-width:0.15513;stroke-miterlimit:4;stroke-dasharray:none"
+       ry="15.420146"
+       rx="34.466618"
+       cy="156.50826"
+       cx="59.337978"
+       id="path3713" />
+    <path
+       transform="matrix(0.56491632,0,0,0.56491632,38.118679,48.634381)"
+       inkscape:original-d="m 160.12804,135.21831 c -0.18348,2.57208 -0.36722,5.14442 -0.55122,7.71702 -0.184,2.5726 -1.2859,4.04198 -1.92925,6.06337"
+       inkscape:path-effect="#path-effect23373"
+       inkscape:connector-curvature="0"
+       id="path23371"
+       d="m 160.12804,135.21831 c 0.15159,2.58172 -0.0342,5.18306 -0.55122,7.71702 -0.42481,2.08211 -1.07279,4.11861 -1.92925,6.06337"
+       style="fill:none;stroke:#ff0000;stroke-width:1.24896;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <path
+       inkscape:original-d="m 160.12804,135.21831 c -0.18348,2.57208 -0.36722,5.14442 -0.55122,7.71702 -0.184,2.5726 -1.2859,4.04198 -1.92925,6.06337"
+       inkscape:path-effect="#path-effect23373-3"
+       inkscape:connector-curvature="0"
+       id="path23371-0"
+       d="m 160.12804,135.21831 c 0.15159,2.58172 -0.0342,5.18306 -0.55122,7.71702 -0.42481,2.08211 -1.07279,4.11861 -1.92925,6.06337"
+       style="fill:none;stroke:#0000ff;stroke-width:0.657381;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       transform="matrix(1.2190178,-0.10360892,0.34873571,0.91532856,-112.83268,5.1046422)" />
     <g
-       id="g4698"
-       transform="matrix(0.02477231,0,0,0.03349834,93.457629,123.36794)">
+       transform="matrix(0.02477231,0,0,0.03349834,93.457629,123.36794)"
+       id="g4698">
       <rect
-         transform="rotate(-45)"
-         y="98.951332"
-         x="-23.848167"
-         height="12.772988"
-         width="94.428879"
+         style="opacity:1;fill:#000000;fill-opacity:1;stroke-width:0.264583"
          id="rect4679"
-         style="opacity:1;fill:#000000;fill-opacity:1;stroke-width:0.26458332" />
-      <rect
-         transform="rotate(45)"
-         y="-29.591486"
-         x="57.962105"
-         height="12.772989"
          width="94.428879"
+         height="12.772988"
+         x="-23.848167"
+         y="98.951332"
+         transform="rotate(-45)" />
+      <rect
+         style="opacity:1;fill:#000000;fill-opacity:1;stroke-width:0.264583"
          id="rect4679-3"
-         style="opacity:1;fill:#000000;fill-opacity:1;stroke-width:0.26458332" />
+         width="94.428879"
+         height="12.772989"
+         x="57.962105"
+         y="-29.591486"
+         transform="rotate(45)" />
     </g>
     <g
-       id="g4698-6"
+       style="fill:#ff0000;fill-opacity:1"
        transform="matrix(0.02615847,0,0,0.03210801,134.86185,133.82349)"
-       style="fill:#ff0000;fill-opacity:1">
+       id="g4698-6">
       <rect
-         transform="rotate(-45)"
-         y="98.951332"
-         x="-23.848167"
-         height="12.772988"
-         width="94.428879"
+         style="opacity:1;fill:#ff0000;fill-opacity:1;stroke-width:0.264583"
          id="rect4679-7"
-         style="opacity:1;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332" />
-      <rect
-         transform="rotate(45)"
-         y="-29.591486"
-         x="57.962105"
-         height="12.772989"
          width="94.428879"
+         height="12.772988"
+         x="-23.848167"
+         y="98.951332"
+         transform="rotate(-45)" />
+      <rect
+         style="opacity:1;fill:#ff0000;fill-opacity:1;stroke-width:0.264583"
          id="rect4679-3-5"
-         style="opacity:1;fill:#ff0000;fill-opacity:1;stroke-width:0.26458332" />
+         width="94.428879"
+         height="12.772989"
+         x="57.962105"
+         y="-29.591486"
+         transform="rotate(45)" />
     </g>
     <path
-       style="fill:none;stroke:#000000;stroke-width:0.60740227;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#Arrow1Mstart)"
-       d="M 135.88343,135.36443 95.7542,125.23932"
+       inkscape:connector-curvature="0"
        id="path4721"
-       inkscape:connector-curvature="0" />
+       d="M 135.88343,135.36443 95.7542,125.23932"
+       style="fill:none;stroke:#000000;stroke-width:0.705556;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#Arrow1Mstart)" />
     <path
-       style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.7710914;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#Arrow1Mstart-3)"
-       d="M 146.30277,105.97705 95.683065,125.16373"
+       inkscape:transform-center-y="-9.4720051"
+       inkscape:transform-center-x="-25.481759"
+       inkscape:connector-curvature="0"
        id="path4721-6"
+       d="M 146.30277,105.97705 95.683065,125.16373"
+       style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.705556;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#Arrow1Mstart-3)" />
+    <path
+       transform="matrix(0.40532071,0,0,0.43969733,55.366772,65.576284)"
+       inkscape:original-d="m 144.14279,102.1454 c 3.76691,4.40946 7.53354,8.81918 11.29992,13.22916 3.76637,4.40999 3.12382,13.2289 4.68533,19.84375"
+       inkscape:path-effect="#path-effect23413"
        inkscape:connector-curvature="0"
-       inkscape:transform-center-x="-25.481759"
-       inkscape:transform-center-y="-9.4720051" />
+       id="path23411"
+       d="m 144.14279,102.1454 c 4.66949,3.51692 8.55625,8.06726 11.29992,13.22916 3.22517,6.06779 4.85585,12.9742 4.68533,19.84375"
+       style="fill:none;stroke:#ffff00;stroke-width:1.6713;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
     <path
-       style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.60272306;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#Arrow1Mstart-3-2)"
-       d="M 128.75964,98.715159 95.683065,125.16373"
+       inkscape:transform-center-y="-13.176117"
+       inkscape:transform-center-x="-16.696123"
+       inkscape:connector-curvature="0"
        id="path4721-6-1"
+       d="M 128.75964,98.715159 95.683065,125.16373"
+       style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.705556;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#Arrow1Mstart-3-2)" />
+    <path
+       inkscape:transform-center-y="-3.7312296"
+       inkscape:transform-center-x="0.18656144"
        inkscape:connector-curvature="0"
-       inkscape:transform-center-x="-16.696123"
-       inkscape:transform-center-y="-13.176117" />
-    <g
-       id="g21741"
-       transform="matrix(0.93341346,0,0,0.87233616,42.677427,-8.0169763)">
-      <path
-         inkscape:transform-center-y="-3.7312296"
-         inkscape:transform-center-x="0.18656144"
-         inkscape:connector-curvature="0"
-         id="path21545"
-         d="m 16.044284,170.51134 v 7.46246"
-         style="fill:none;stroke:#000000;stroke-width:0.28698087px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker21677)" />
-      <path
-         inkscape:connector-curvature="0"
-         id="path21547"
-         d="m 23.133619,177.9738 h -7.089335 v 0 0"
-         style="fill:none;stroke:#000000;stroke-width:0.29800001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker21619)" />
-    </g>
+       id="path21545"
+       d="M 57.653378,140.72623 V 147.236"
+       style="fill:none;stroke:#000000;stroke-width:0.352778;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker21677)" />
+    <path
+       inkscape:connector-curvature="0"
+       id="path21547"
+       d="m 64.270658,147.236 h -6.61728 v 0 0"
+       style="fill:none;stroke:#000000;stroke-width:0.352778;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:0;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker21619);paint-order:markers stroke fill" />
     <flowRoot
-       xml:space="preserve"
+       transform="matrix(0.14946744,0,0,0.14946744,42.394234,98.414277)"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:25.9625px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
        id="flowRoot21759"
-       style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
-       transform="matrix(0.14946744,0,0,0.14946744,46.634471,93.883413)"><flowRegion
+       xml:space="preserve"><flowRegion
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:25.9625px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal"
          id="flowRegion21761"><rect
-           id="rect21763"
-           width="143.12025"
-           height="46.906097"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:25.9625px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal"
+           y="334.20209"
            x="124.10008"
-           y="334.20209" /></flowRegion><flowPara
-         id="flowPara21765"
-         style="font-size:16px">$\mathbf{X_m}$</flowPara></flowRoot>    <text
-       xml:space="preserve"
-       style="font-style:normal;font-weight:normal;font-size:5.9786973px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.14946742"
-       x="57.321857"
-       y="139.58537"
-       id="text21769"><tspan
-         sodipodi:role="line"
+           height="31.949934"
+           width="224.73087"
+           id="rect21763" /></flowRegion><flowPara
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:25.9625px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal"
+         id="flowPara21765">$\mathbf{X_m}$</flowPara></flowRoot>
+    <text
+       id="text21769"
+       y="139.34717"
+       x="53.398239"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.88056px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.149467"
+       xml:space="preserve"><tspan
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.88056px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.149467"
+         y="139.34717"
+         x="53.398239"
          id="tspan21767"
-         x="57.321857"
-         y="139.58537"
-         style="font-size:2.39147878px;stroke-width:0.14946742">$\mathbf{Y_m}$</tspan><tspan
-         sodipodi:role="line"
-         x="57.321857"
-         y="147.05875"
-         style="stroke-width:0.14946742"
-         id="tspan21771" /></text>
+         sodipodi:role="line">$\mathbf{Y_m}$</tspan><tspan
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.88056px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.149467"
+         id="tspan21771"
+         y="144.19786"
+         x="53.398239"
+         sodipodi:role="line" /></text>
     <flowRoot
-       xml:space="preserve"
+       transform="matrix(0.14946744,0,0,0.14946744,53.998198,75.558317)"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:25.9625px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
        id="flowRoot21781"
-       style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
-       transform="matrix(0.14946744,0,0,0.14946744,51.164009,76.125789)"><flowRegion
+       xml:space="preserve"><flowRegion
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:25.9625px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal"
          id="flowRegion21783"><rect
-           id="rect21785"
-           width="348.95834"
-           height="56.250004"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:25.9625px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal"
+           y="340.22803"
            x="144.79167"
-           y="340.22803" /></flowRegion><flowPara
-         id="flowPara21787"><flowSpan
-   style="font-size:16px"
-   id="flowSpan21789">center of zone</flowSpan> </flowPara></flowRoot>    <text
-       xml:space="preserve"
-       style="font-style:normal;font-weight:normal;font-size:5.9786973px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.14946742"
-       x="132.3143"
-       y="140.49232"
-       id="text21801"><tspan
-         sodipodi:role="line"
-         x="132.3143"
-         y="140.49232"
-         style="font-size:2.39147878px;stroke-width:0.14946742"
-         id="tspan21803">evaluated mesh</tspan></text>
+           height="35.244225"
+           width="198.69656"
+           id="rect21785" /></flowRegion><flowPara
+         id="flowPara21787">$c_k$ centroid</flowPara></flowRoot>
     <path
-       style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.43555048;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.74220195, 0.43555049;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#Arrow1Mend)"
-       d="m 95.937701,125.07759 h 51.535349 v 0"
+       inkscape:connector-curvature="0"
        id="path21809"
-       inkscape:connector-curvature="0" />
+       d="m 95.937701,125.07759 h 51.535349 v 0"
+       style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.705556;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:2.82222, 0.705556;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#Arrow1Mend)" />
     <flowRoot
-       xml:space="preserve"
+       transform="matrix(0.14946744,0,0,0.14946744,36.411052,49.216464)"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:25.9625px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
        id="flowRoot23311"
-       style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
-       transform="matrix(0.14946744,0,0,0.14946744,52.119285,51.066871)"><flowRegion
+       xml:space="preserve"><flowRegion
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:25.9625px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal"
          id="flowRegion23313"><rect
-           id="rect23315"
-           width="167.70834"
-           height="51.041656"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:25.9625px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal"
+           y="347.51968"
            x="641.66669"
-           y="347.51968" /></flowRegion><flowPara
-         id="flowPara23317"
-         style="font-size:16px">principal direction</flowPara></flowRoot>    <flowRoot
-       xml:space="preserve"
+           height="31.970911"
+           width="235.39511"
+           id="rect23315" /></flowRegion><flowPara
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:25.9625px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal"
+         id="flowPara23317">principal direction</flowPara></flowRoot>
+    <flowRoot
+       transform="matrix(0.14946744,0,0,0.14946744,51.043144,53.035321)"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:25.9625px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
        id="flowRoot23319"
-       style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
-       transform="matrix(0.14946744,0,0,0.14946744,74.0128,51.704581)"><flowRegion
+       xml:space="preserve"><flowRegion
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:25.9625px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal"
          id="flowRegion23321"><rect
-           id="rect23323"
-           width="252.08334"
-           height="53.125"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:25.9625px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal"
+           y="273.56134"
            x="382.29166"
-           y="273.56134" /></flowRegion><flowPara
-         id="flowPara23325"
-         style="font-size:16px">steepest slope direction</flowPara></flowRoot>    <path
-       style="fill:none;stroke:#ff0000;stroke-width:0.76499999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       d="m 160.12804,135.21831 c 0.15159,2.58172 -0.0342,5.18306 -0.55122,7.71702 -0.42481,2.08211 -1.07279,4.11861 -1.92925,6.06337"
-       id="path23371"
-       inkscape:connector-curvature="0"
-       inkscape:path-effect="#path-effect23373"
-       inkscape:original-d="m 160.12804,135.21831 c -0.18348,2.57208 -0.36722,5.14442 -0.55122,7.71702 -0.184,2.5726 -1.2859,4.04198 -1.92925,6.06337"
-       transform="matrix(0.56491632,0,0,0.56491632,38.118679,48.634381)" />
-    <path
-       transform="matrix(1.2190178,-0.10360892,0.34873571,0.91532856,-112.83268,5.1046422)"
-       style="fill:none;stroke:#0000ff;stroke-width:0.31738591;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       d="m 160.12804,135.21831 c 0.15159,2.58172 -0.0342,5.18306 -0.55122,7.71702 -0.42481,2.08211 -1.07279,4.11861 -1.92925,6.06337"
-       id="path23371-0"
-       inkscape:connector-curvature="0"
-       inkscape:path-effect="#path-effect23373-3"
-       inkscape:original-d="m 160.12804,135.21831 c -0.18348,2.57208 -0.36722,5.14442 -0.55122,7.71702 -0.184,2.5726 -1.2859,4.04198 -1.92925,6.06337" />
-    <path
-       style="fill:none;stroke:#00ff00;stroke-width:1.39971459;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       d="m 144.14279,102.1454 c 4.66949,3.51692 8.55625,8.06726 11.29992,13.22916 3.22517,6.06779 4.85585,12.9742 4.68533,19.84375"
-       id="path23411"
-       inkscape:connector-curvature="0"
-       inkscape:path-effect="#path-effect23413"
-       inkscape:original-d="m 144.14279,102.1454 c 3.76691,4.40946 7.53354,8.81918 11.29992,13.22916 3.76637,4.40999 3.12382,13.2289 4.68533,19.84375"
-       transform="matrix(0.40532071,0,0,0.43969733,55.366772,65.576284)" />
-    <flowRoot
-       xml:space="preserve"
-       id="flowRoot23415"
-       style="font-style:normal;font-weight:normal;font-size:16px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
-       transform="matrix(0.14946744,0,0,0.14946744,70.61804,18.662722)"><flowRegion
-         id="flowRegion23417"
-         style="font-size:16px"><rect
-           id="rect23419"
-           width="82.291702"
-           height="21.875"
-           x="431.25"
-           y="654.81134"
-           style="font-size:16px" /></flowRegion><flowPara
-         id="flowPara23421">$\theta_I$</flowPara></flowRoot>    <flowRoot
+           height="33.013615"
+           width="315.84439"
+           id="rect23323" /></flowRegion><flowPara
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:25.9625px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal"
+         id="flowPara23325">steepest slope direction</flowPara></flowRoot>
+    <text
+       id="text170"
+       y="129.99129"
+       x="128.84341"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.88056px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+       xml:space="preserve"><tspan
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.88056px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.264583"
+         y="129.99129"
+         x="128.84341"
+         id="tspan168"
+         sodipodi:role="line">$\beta_{i\,k}$</tspan></text>
+    <text
+       id="text174"
+       y="118.46556"
+       x="132.07291"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.88056px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+       xml:space="preserve"><tspan
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.88056px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.264583"
+         y="118.46556"
+         x="132.07291"
+         id="tspan172"
+         sodipodi:role="line">$\theta_l$</tspan></text>
+    <text
        xml:space="preserve"
-       id="flowRoot23423"
-       style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
-       transform="matrix(0.14946744,0,0,0.14946744,83.147268,20.49888)"><flowRegion
-         id="flowRegion23425"><rect
-           id="rect23427"
-           width="117.70832"
-           height="59.375042"
-           x="311.45834"
-           y="728.76971" /></flowRegion><flowPara
-         id="flowPara23429"
-         style="font-size:16px">$\beta_{ik}$</flowPara></flowRoot>    <flowRoot
-       xml:space="preserve"
-       id="flowRoot23431"
-       style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
-       transform="matrix(0.14946744,0,0,0.14946744,82.982592,6.0408003)"><flowRegion
-         id="flowRegion23433"><rect
-           id="rect23435"
-           width="382.29166"
-           height="83.333336"
-           x="240.625"
-           y="705.85303" /></flowRegion><flowPara
-         id="flowPara23437"
-         style="font-size:16px">$\theta_k$</flowPara></flowRoot>  </g>
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.88056px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+       x="117.18877"
+       y="112.29526"
+       id="text174-8"><tspan
+         sodipodi:role="line"
+         id="tspan172-8"
+         x="117.18877"
+         y="112.29526"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.88056px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.264583">$\theta_k$</tspan></text>
+    <text
+       transform="translate(-12.715006,-10.537447)"
+       id="text1151"
+       y="150.94215"
+       x="124.74471"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.88056px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;letter-spacing:0px;word-spacing:0px;white-space:pre;inline-size:55.5302;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+       xml:space="preserve"><tspan
+         x="124.74471"
+         y="150.94215"><tspan
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.88056px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.264583">evaluated mesh unit: $m_i$</tspan></tspan></text>
+  </g>
 </svg>