diff --git a/arbeit/files/titlepage.tex b/arbeit/files/titlepage.tex index ec9da3a..b7e89de 100644 --- a/arbeit/files/titlepage.tex +++ b/arbeit/files/titlepage.tex @@ -59,7 +59,7 @@ \begin{center} \begin{tabular}{lrl} \hspace{0.99cm} Supervisor:~&Prof.~Dr.~&Mario Botsch\\ - \hspace{0.99cm} &Dipl.~Math.~&Alexander~Richter + \hspace{0.99cm} &Dipl.~Math.~&Andreas~Richter \end{tabular} \end{center} \vspace*{\stretch{.2}} diff --git a/arbeit/img/B-Splines.png b/arbeit/img/B-Splines.png new file mode 100644 index 0000000..61966fd Binary files /dev/null and b/arbeit/img/B-Splines.png differ diff --git a/arbeit/img/B-Splines.svg b/arbeit/img/B-Splines.svg new file mode 100644 index 0000000..566ce40 --- /dev/null +++ b/arbeit/img/B-Splines.svg @@ -0,0 +1,405 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + ? + + + + + + + + + + + + + + + + + + + + + + diff --git a/arbeit/ma.md b/arbeit/ma.md index 2b4aedb..f3518c6 100644 --- a/arbeit/ma.md +++ b/arbeit/ma.md @@ -26,7 +26,7 @@ Unless otherwise noted the following holds: \improvement[inline]{Mehr Bilder} Many modern industrial design processes require advanced optimization methods -do to the increased complexity. These designs have to adhere to more and more +due to the increased complexity. These designs have to adhere to more and more degrees of freedom as methods refine and/or other methods are used. Examples for this are physical domains like aerodynamic (i.e. drag), fluid dynamics (i.e. throughput of liquid) --- where the complexity increases with the temporal and @@ -38,35 +38,54 @@ time or from case to case. Evolutionary algorithms cope especially well with these problem domains while addressing all the issues at hand\cite{minai2006complex}. One of the main concerns in these algorithms is the formulation of the problems in terms of a -genome and a fitness function. While one can typically use an arbitrary -cost--function for the fitness--functions (i.e. amount of drag, amount of space, +*genome* and *fitness--function*. While one can typically use an arbitrary +cost--function for the *fitness--functions* (i.e. amount of drag, amount of space, etc.), the translation of the problem--domain into a simple parametric -representation can be challenging. +representation (the *genome*) can be challenging. -The quality of such a representation in biological evolution is called -*evolvability*\cite{wagner1996complex} and is at the core of this thesis, as the +This translation is often necessary as the target of the optimization may have +too many degrees of freedom. In the example of an aerodynamic simulation of drag +onto an object, those objects--designs tend to have a high number of vertices to +adhere to various requirements (visual, practical, physical, etc.). A simpler +representation of the same object in only a few parameters that manipulate the +whole in a sensible matter are desirable, as this often decreases the +computation time significantly. + +Additionally one can exploit the fact, that drag in this case is especially +sensitive to non--smooth surfaces, so that a smooth local manipulation of the +surface as a whole is more advantageous than merely random manipulation of the +vertices. + +The quality of such a low-dimensional representation in biological evolution is +strongly tied to the notion of *evolvability*\cite{wagner1996complex}, as the parametrization of the problem has serious implications on the convergence speed and the quality of the solution\cite{Rothlauf2006}. However, there is no consensus on how *evolvability* is defined and the meaning -varies from context to context\cite{richter2015evolvability}. +varies from context to context\cite{richter2015evolvability}, so there is need +for some criteria we can measure, so that we are able to compare different +representations to learn and improve upon these. + +One example of such a general representation of an object is to generate random +points and represent vertices of an object as distances to these points --- for +example via \acf{RBF}. If one (or the algorithm) would move such a point the +object will get deformed locally (due to the \ac{RBF}). As this results in a +simple mapping from the parameter-space onto the object one can try out +different representations of the same object and evaluate the *evolvability*. +This is exactly what Richter et al.\cite{anrichterEvol} have done. As we transfer the results of Richter et al.\cite{anrichterEvol} from using -\acf{RBF} as a representation to manipulate a geometric mesh to the use of +\acf{RBF} as a representation to manipulate geometric objects to the use of \acf{FFD} we will use the same definition for evolvability the original author used, namely *regularity*, *variability*, and *improvement potential*. We -introduce these term in detail in Chapter \ref{sec:intro:rvi}. +introduce these term in detail in Chapter \ref{sec:intro:rvi}. In the original +publication the author could show a correlation between these +evolvability--criteria with the quality and potential of such optimization. -In the original publication the author used random sampled points weighted with -\acf{RBF} to deform the mesh and showed that the mentioned criteria of -*regularity*, *variability*, and *improvement potential* correlate with the quality -and potential of such optimization. - -We will replicate the same setup on the same meshes but use \acf{FFD} instead of +We will replicate the same setup on the same objects but use \acf{FFD} instead of \acf{RBF} to create a local deformation near the control points and evaluate if -the evolution--criteria still work as a predictor given the different deformation -scheme, as suspected in \cite{anrichterEvol}. - -## Outline of this thesis +the evolution--criteria still work as a predictor for *evolvability* of the +representation given the different deformation scheme, as suspected in +\cite{anrichterEvol}. First we introduce different topics in isolation in Chapter \ref{sec:back}. We take an abstract look at the definition of \ac{FFD} for a one--dimensional line @@ -79,7 +98,7 @@ In a third step we take a look at the definition of the different evolvability criteria established in \cite{anrichterEvol}. In Chapter \ref{sec:impl} we take a look at our implementation of \ac{FFD} and -the adaptation for 3D--meshes. +the adaptation for 3D--meshes that were used. Next, in Chapter \ref{sec:eval}, we describe the different scenarios we use to evaluate the different evolvability--criteria incorporating all aspects @@ -94,13 +113,39 @@ Chapter \ref{sec:res} with further on discussion in Chapter \ref{sec:dis}. \label{sec:back:ffd} First of all we have to establish how a \ac{FFD} works and why this is a good -tool for deforming meshes in the first place. For simplicity we only summarize -the 1D--case from \cite{spitzmuller1996bezier} here and go into the extension to -the 3D case in chapter \ref{3dffd}. +tool for deforming geometric objects (esp. meshes in our case) in the first +place. For simplicity we only summarize the 1D--case from +\cite{spitzmuller1996bezier} here and go into the extension to the 3D case in +chapter \ref{3dffd}. +The main idea of \ac{FFD} is to create a function $s : [0,1[^d \mapsto +\mathbb{R}^d$ that spans a certain part of a vector--space and is only linearly +parametrized by some special control points $p_i$ and an constant +attribution--function $a_i(u)$, so +$$ +s(u) = \sum_i a_i(u) p_i +$$ +can be thought of a representation of the inside of the convex hull generated by +the control points where each point can be accessed by the right $u \in [0,1[$. + +\begin{figure}[!ht] +\begin{center} +\includegraphics[width=0.7\textwidth]{img/B-Splines.png} +\end{center} +\caption[Example of B-Splines]{Example of a parametrization of a line with +corresponding deformation to generate a deformed objet} +\label{fig:bspline} +\end{figure} + +In the example in figure \ref{fig:bspline}, the control--points are indicated as +red dots and the color-gradient should hint at the $u$--values ranging from +$0$ to $1$. + +We now define a \acf{FFD} by the following: Given an arbitrary number of points $p_i$ alongside a line, we map a scalar -value $\tau_i \in [0,1[$ to each point with $\tau_i < \tau_{i+1} \forall i$. -Given a degree of the target polynomial $d$ we define the curve +value $\tau_i \in [0,1[$ to each point with $\tau_i < \tau_{i+1} \forall i$ +according to the position of $p_i$ on said line. +Additionally, given a degree of the target polynomial $d$ we define the curve $N_{i,d,\tau_i}(u)$ as follows: \begin{equation} \label{eqn:ffd1d1} @@ -114,7 +159,7 @@ N_{i,d,\tau}(u) = \frac{u-\tau_i}{\tau_{i+d}} N_{i,d-1,\tau}(u) + \frac{\tau_{i+ If we now multiply every $p_i$ with the corresponding $N_{i,d,\tau_i}(u)$ we get the contribution of each point $p_i$ to the final curve--point parameterized only by $u \in [0,1[$. As can be seen from \eqref{eqn:ffd1d2} we only access points -$[i..i+d]$ for any given $i$^[one more for each recursive step.], which gives +$[p_i..p_{i+d}]$ for any given $i$^[one more for each recursive step.], which gives us, in combination with choosing $p_i$ and $\tau_i$ in order, only a local interference of $d+1$ points. @@ -130,10 +175,28 @@ $$s(u) = \sum_{i} N_{i,d,\tau_i}(u) p_i$$ these derivations yield $\frac{\partial^d}{\partial u} s(u) = 0$. Another interesting property of these recursive polynomials is that they are -continuous (given $d \ge 1$) as every $p_i$ gets blended in linearly between -$\tau_i$ and $\tau_{i+d}$ and out linearly between $\tau_{i+1}$ and -$\tau_{i+d+1}$ as can bee seen from the two coefficients in every step of the -recursion. +continuous (given $d \ge 1$) as every $p_i$ gets blended in between $\tau_i$ and +$\tau_{i+d}$ and out between $\tau_{i+1}$, and $\tau_{i+d+1}$ as can bee seen from the two coefficients +in every step of the recursion. + +\improvement[inline]{Weitere Eigenschaften erwähnen: +\newline Convex hull +\newline $\sum_i N_i = 1$? +\newline Bilder von Basisfunktionen zur Visualisierung. +} + +For a given number of points $v_1,\dots,v_n$ we can then calculate +the contributions $n_{i,j}~:=~N_{j,d,\tau}$ of each control point $p_j$ to get the +projection from the control--point--space into the object--space: +$$ +v_i = \sum_j n_{i,j} \cdot p_j = \vec{n}_i^{T} \vec{p} +$$ +or written for all points at the same time: +$$ +\vec{v} = \vec{N} \vec{p} +$$ +where $\vec{N}$ is the $n \times m$ transformation--matrix (later on called +**deformation matrix**) for $n$ object--space--points and $m$ control--points. ### Why is \ac{FFD} a good deformation function? \label{sec:back:ffdgood} @@ -202,7 +265,7 @@ The general shape of an evolutionary algorithm (adapted from denotes the population of parameters in step $t$ of the algorithm. The population contains $\mu$ individuals $a_i$ that fit the shape of the parameters we are looking for. Typically these are initialized by a random guess or just -zero. Further on we need a so--called *fitness--function* $\Phi : I \mapsto M$ that can take +zero. Further on we need a so--called *fitness--function* $\Phi : I \mapsto M$\improvement{Was ist $I,M$?\newline Bezug Genotyp/Phenotyp} that can take each parameter to a measurable space along a convergence--function $c : I \mapsto \mathbb{B}$ that terminates the optimization. @@ -263,16 +326,20 @@ But in reality many problems have no analytic solution, because the problem is either not convex or there are so many parameters that an analytic solution (mostly meaning the equivalence to an exhaustive search) is computationally not feasible. Here evolutionary optimization has one more advantage as you can at -least get a suboptimal solutions fast, which then refine over time. +least get suboptimal solutions fast, which then refine over time. ## Criteria for the evolvability of linear deformations \label{sec:intro:rvi} +\improvement[inline]{Nomenklatur. Was ist $\vec{U}$? Kurz Matrix--Darstellung +des Problems & Rückgriff auf FFD-Kapitel.} + + ### Variability In \cite{anrichterEvol} *variability* is defined as $$V(\vec{U}) := \frac{\textrm{rank}(\vec{U})}{n},$$ -whereby $\vec{U}$ is the $m \times n$ deformation--Matrix used to map the $m$ +whereby $\vec{U}$ is the $n \times m$ deformation--Matrix \unsure{Nicht $(n\cdot d) \times m$? Wegen $u,v,w$?} used to map the $m$ control points onto the $n$ vertices. Given $n = m$, an identical number of control--points and vertices, this @@ -282,10 +349,6 @@ the solution is to trivially move every control--point onto a target--point. In praxis the value of $V(\vec{U})$ is typically $\ll 1$, because as there are only few control--points for many vertices, so $m \ll n$. -Additionally in our setup we connect neighbouring control--points in a grid so -each control point is not independent, but typically depends on $4^d$ -control--points for an $d$--dimensional control mesh. - ### Regularity *Regularity* is defined\cite{anrichterEvol} as diff --git a/arbeit/ma.pdf b/arbeit/ma.pdf index 5eac667..9b135c3 100644 Binary files a/arbeit/ma.pdf and b/arbeit/ma.pdf differ diff --git a/arbeit/ma.tex b/arbeit/ma.tex index 2274aca..2065d41 100644 --- a/arbeit/ma.tex +++ b/arbeit/ma.tex @@ -169,7 +169,7 @@ Unless otherwise noted the following holds: \improvement[inline]{Mehr Bilder} Many modern industrial design processes require advanced optimization -methods do to the increased complexity. These designs have to adhere to +methods due to the increased complexity. These designs have to adhere to more and more degrees of freedom as methods refine and/or other methods are used. Examples for this are physical domains like aerodynamic (i.e.~drag), fluid dynamics (i.e.~throughput of liquid) --- where the @@ -182,39 +182,59 @@ time or from case to case. Evolutionary algorithms cope especially well with these problem domains while addressing all the issues at hand\cite{minai2006complex}. One of the main concerns in these algorithms is the formulation of the problems -in terms of a genome and a fitness function. While one can typically use -an arbitrary cost--function for the fitness--functions (i.e.~amount of -drag, amount of space, etc.), the translation of the problem--domain -into a simple parametric representation can be challenging. +in terms of a \emph{genome} and \emph{fitness--function}. While one can +typically use an arbitrary cost--function for the +\emph{fitness--functions} (i.e.~amount of drag, amount of space, etc.), +the translation of the problem--domain into a simple parametric +representation (the \emph{genome}) can be challenging. -The quality of such a representation in biological evolution is called -\emph{evolvability}\cite{wagner1996complex} and is at the core of this -thesis, as the parametrization of the problem has serious implications -on the convergence speed and the quality of the -solution\cite{Rothlauf2006}. However, there is no consensus on how -\emph{evolvability} is defined and the meaning varies from context to -context\cite{richter2015evolvability}. +This translation is often necessary as the target of the optimization +may have too many degrees of freedom. In the example of an aerodynamic +simulation of drag onto an object, those objects--designs tend to have a +high number of vertices to adhere to various requirements (visual, +practical, physical, etc.). A simpler representation of the same object +in only a few parameters that manipulate the whole in a sensible matter +are desirable, as this often decreases the computation time +significantly. + +Additionally one can exploit the fact, that drag in this case is +especially sensitive to non--smooth surfaces, so that a smooth local +manipulation of the surface as a whole is more advantageous than merely +random manipulation of the vertices. + +The quality of such a low-dimensional representation in biological +evolution is strongly tied to the notion of +\emph{evolvability}\cite{wagner1996complex}, as the parametrization of +the problem has serious implications on the convergence speed and the +quality of the solution\cite{Rothlauf2006}. However, there is no +consensus on how \emph{evolvability} is defined and the meaning varies +from context to context\cite{richter2015evolvability}, so there is need +for some criteria we can measure, so that we are able to compare +different representations to learn and improve upon these. + +One example of such a general representation of an object is to generate +random points and represent vertices of an object as distances to these +points --- for example via \acf{RBF}. If one (or the algorithm) would +move such a point the object will get deformed locally (due to the +\ac{RBF}). As this results in a simple mapping from the parameter-space +onto the object one can try out different representations of the same +object and evaluate the \emph{evolvability}. This is exactly what +Richter et al.\cite{anrichterEvol} have done. As we transfer the results of Richter et al.\cite{anrichterEvol} from -using \acf{RBF} as a representation to manipulate a geometric mesh to +using \acf{RBF} as a representation to manipulate geometric objects to the use of \acf{FFD} we will use the same definition for evolvability the original author used, namely \emph{regularity}, \emph{variability}, and \emph{improvement potential}. We introduce these term in detail in -Chapter \ref{sec:intro:rvi}. +Chapter \ref{sec:intro:rvi}. In the original publication the author +could show a correlation between these evolvability--criteria with the +quality and potential of such optimization. -In the original publication the author used random sampled points -weighted with \acf{RBF} to deform the mesh and showed that the mentioned -criteria of \emph{regularity}, \emph{variability}, and \emph{improvement -potential} correlate with the quality and potential of such -optimization. - -We will replicate the same setup on the same meshes but use \acf{FFD} +We will replicate the same setup on the same objects but use \acf{FFD} instead of \acf{RBF} to create a local deformation near the control points and evaluate if the evolution--criteria still work as a predictor -given the different deformation scheme, as suspected in -\cite{anrichterEvol}. - -\section{Outline of this thesis}\label{outline-of-this-thesis} +for \emph{evolvability} of the representation given the different +deformation scheme, as suspected in \cite{anrichterEvol}. First we introduce different topics in isolation in Chapter \ref{sec:back}. We take an abstract look at the definition of \ac{FFD} @@ -227,7 +247,7 @@ definition of the different evolvability criteria established in \cite{anrichterEvol}. In Chapter \ref{sec:impl} we take a look at our implementation of -\ac{FFD} and the adaptation for 3D--meshes. +\ac{FFD} and the adaptation for 3D--meshes that were used. Next, in Chapter \ref{sec:eval}, we describe the different scenarios we use to evaluate the different evolvability--criteria incorporating all @@ -244,14 +264,39 @@ in Chapter \ref{sec:dis}. \label{sec:back:ffd} First of all we have to establish how a \ac{FFD} works and why this is a -good tool for deforming meshes in the first place. For simplicity we -only summarize the 1D--case from \cite{spitzmuller1996bezier} here and -go into the extension to the 3D case in chapter \ref{3dffd}. +good tool for deforming geometric objects (esp. meshes in our case) in +the first place. For simplicity we only summarize the 1D--case from +\cite{spitzmuller1996bezier} here and go into the extension to the 3D +case in chapter~\ref{3dffd}. +The main idea of \ac{FFD} is to create a function +\(s : [0,1[^d \mapsto \mathbb{R}^d\) that spans a certain part of a +vector--space and is only linearly parametrized by some special control +points \(p_i\) and an constant attribution--function \(a_i(u)\), so \[ +s(u) = \sum_i a_i(u) p_i +\] can be thought of a representation of the inside of the convex hull +generated by the control points where each point can be accessed by the +right \(u \in [0,1[\). + +\begin{figure}[!ht] +\begin{center} +\includegraphics[width=0.7\textwidth]{img/B-Splines.png} +\end{center} +\caption[Example of B-Splines]{Example of a parametrization of a line with +corresponding deformation to generate a deformed objet} +\label{fig:bspline} +\end{figure} + +In the example in figure~\ref{fig:bspline}, the control--points are +indicated as red dots and the color-gradient should hint at the +\(u\)--values ranging from \(0\) to \(1\). + +We now define a \acf{FFD} by the following:\\ Given an arbitrary number of points \(p_i\) alongside a line, we map a scalar value \(\tau_i \in [0,1[\) to each point with -\(\tau_i < \tau_{i+1} \forall i\). Given a degree of the target -polynomial \(d\) we define the curve \(N_{i,d,\tau_i}(u)\) as follows: +\(\tau_i < \tau_{i+1} \forall i\) according to the position of \(p_i\) +on said line. Additionally, given a degree of the target polynomial +\(d\) we define the curve \(N_{i,d,\tau_i}(u)\) as follows: \begin{equation} \label{eqn:ffd1d1} N_{i,0,\tau}(u) = \begin{cases} 1, & u \in [\tau_i, \tau_{i+1}[ \\ 0, & \mbox{otherwise} \end{cases} @@ -266,10 +311,10 @@ N_{i,d,\tau}(u) = \frac{u-\tau_i}{\tau_{i+d}} N_{i,d-1,\tau}(u) + \frac{\tau_{i+ If we now multiply every \(p_i\) with the corresponding \(N_{i,d,\tau_i}(u)\) we get the contribution of each point \(p_i\) to the final curve--point parameterized only by \(u \in [0,1[\). As can be -seen from \eqref{eqn:ffd1d2} we only access points \([i..i+d]\) for any -given \(i\)\footnote{one more for each recursive step.}, which gives us, -in combination with choosing \(p_i\) and \(\tau_i\) in order, only a -local interference of \(d+1\) points. +seen from \eqref{eqn:ffd1d2} we only access points \([p_i..p_{i+d}]\) +for any given \(i\)\footnote{one more for each recursive step.}, which +gives us, in combination with choosing \(p_i\) and \(\tau_i\) in order, +only a local interference of \(d+1\) points. We can even derive this equation straightforward for an arbitrary \(N\)\footnote{\emph{Warning:} in the case of \(d=1\) the @@ -283,9 +328,26 @@ derivations yield \(\frac{\partial^d}{\partial u} s(u) = 0\). Another interesting property of these recursive polynomials is that they are continuous (given \(d \ge 1\)) as every \(p_i\) gets blended in -linearly between \(\tau_i\) and \(\tau_{i+d}\) and out linearly between -\(\tau_{i+1}\) and \(\tau_{i+d+1}\) as can bee seen from the two -coefficients in every step of the recursion. +between \(\tau_i\) and \(\tau_{i+d}\) and out between \(\tau_{i+1}\), +and \(\tau_{i+d+1}\) as can bee seen from the two coefficients in every +step of the recursion. + +\improvement[inline]{Weitere Eigenschaften erwähnen: +\newline Convex hull +\newline $\sum_i N_i = 1$? +\newline Bilder von Basisfunktionen zur Visualisierung. +} + +For a given number of points \(v_1,\dots,v_n\) we can then calculate the +contributions \(n_{i,j}~:=~N_{j,d,\tau}\) of each control point \(p_j\) +to get the projection from the control--point--space into the +object--space: \[ +v_i = \sum_j n_{i,j} \cdot p_j = \vec{n}_i^{T} \vec{p} +\] or written for all points at the same time: \[ +\vec{v} = \vec{N} \vec{p} +\] where \(\vec{N}\) is the \(n \times m\) transformation--matrix (later +on called \textbf{deformation matrix}) for \(n\) object--space--points +and \(m\) control--points. \subsection{\texorpdfstring{Why is \ac{FFD} a good deformation function?}{Why is a good deformation function?}}\label{why-is-a-good-deformation-function} @@ -361,9 +423,11 @@ The general shape of an evolutionary algorithm (adapted from algorithm. The population contains \(\mu\) individuals \(a_i\) that fit the shape of the parameters we are looking for. Typically these are initialized by a random guess or just zero. Further on we need a -so--called \emph{fitness--function} \(\Phi : I \mapsto M\) that can take -each parameter to a measurable space along a convergence--function -\(c : I \mapsto \mathbb{B}\) that terminates the optimization. +so--called \emph{fitness--function} +\(\Phi : I \mapsto M\)\improvement{Was ist $I,M$?\newline Bezug Genotyp/Phenotyp} +that can take each parameter to a measurable space along a +convergence--function \(c : I \mapsto \mathbb{B}\) that terminates the +optimization. The main algorithm just repeats the following steps: @@ -435,7 +499,7 @@ But in reality many problems have no analytic solution, because the problem is either not convex or there are so many parameters that an analytic solution (mostly meaning the equivalence to an exhaustive search) is computationally not feasible. Here evolutionary optimization -has one more advantage as you can at least get a suboptimal solutions +has one more advantage as you can at least get suboptimal solutions fast, which then refine over time. \section{Criteria for the evolvability of linear @@ -443,12 +507,16 @@ deformations}\label{criteria-for-the-evolvability-of-linear-deformations} \label{sec:intro:rvi} +\improvement[inline]{Nomenklatur. Was ist $\vec{U}$? Kurz Matrix--Darstellung +des Problems & Rückgriff auf FFD-Kapitel.} + \subsection{Variability}\label{variability} In \cite{anrichterEvol} \emph{variability} is defined as \[V(\vec{U}) := \frac{\textrm{rank}(\vec{U})}{n},\] whereby \(\vec{U}\) -is the \(m \times n\) deformation--Matrix used to map the \(m\) control -points onto the \(n\) vertices. +is the \(n \times m\) deformation--Matrix +\unsure{Nicht $(n\cdot d) \times m$? Wegen $u,v,w$?} used to map the +\(m\) control points onto the \(n\) vertices. Given \(n = m\), an identical number of control--points and vertices, this quotient will be \(=1\) if all control points are independent of @@ -458,10 +526,6 @@ onto a target--point. In praxis the value of \(V(\vec{U})\) is typically \(\ll 1\), because as there are only few control--points for many vertices, so \(m \ll n\). -Additionally in our setup we connect neighbouring control--points in a -grid so each control point is not independent, but typically depends on -\(4^d\) control--points for an \(d\)--dimensional control mesh. - \subsection{Regularity}\label{regularity} \emph{Regularity} is defined\cite{anrichterEvol} as