iccsa-19-vessel

git clone https://git.igankevich.com/iccsa-19-vessel.git
Log | Files | Refs

commit 06c42af1c653eb5c5033c08ccb09528edb516d4c
parent f10bd6f0b1029f2d5d8eb3aef75af55a1f5ea023
Author: Ivan Gankevich <igankevich@ya.ru>
Date:   Sat, 30 Mar 2019 13:34:35 +0300

main part

Diffstat:
main.tex | 129++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-----
references.bib | 10+++++++++-
2 files changed, 130 insertions(+), 9 deletions(-)

diff --git a/main.tex b/main.tex @@ -60,10 +60,10 @@ In the original programme~\cite{hull2010} that visualises ship lines and calculates hydrostatic characteristics, ship hull is described by a collection of curves; however, for a programme that simulates ship dynamics in rough sea this description is not convenient. A better representation would be a -collection of triangles that approximate analytically given ship hull geometry. -At the centre of each triangle pressure force induced by ocean waves is -applied, and then these forces are used to calculate ship motion. Triangles is -a better representation because they +collection of triangles (a \emph{triangular mesh}) that approximate +analytically given ship hull geometry. At the centre of each triangle pressure +force induced by ocean waves is applied, and then these forces are used to +calculate ship motion. Triangles is a better representation because they \begin{itemize} \item do not require recomputation every frame (like analytic curves), \item have simple formula for area (which is needed for pressure force @@ -71,9 +71,122 @@ a better representation because they \item the same representation is used internally by graphical accelerators that visualise simulation frames. \end{itemize} - - - +In the following paragraphs we describe how analytically given ship hull is +transformed into a fully-connected collection of triangles. + +In Vessel database each ship hull is divided into three sections +(fig.~\ref{fig:sections}): aft, main and bow sections. Main section consists of +frames each of which is defined by a collection of points lying in transverse +plane. Smooth curve that goes though all of these points is created by cubic +Hermite spline interpolation. Each frame may not have the same number of points +(but usually do), and there are no additional points between endpoints of +subsequent frames in longitudinal plane. Aft and bow sections consist of +frames in transverse plane and a curve in longitudinal plane that defines the +shape of the ship hull in this plane. This curve go through (usually) all +frames and defines intermediate points between endpoints of subsequent frames. +If it does not go between some frames, then there are no intermediate points +between them. Curves are not closed and define only left part of the ship hull, +the full ship hull model is created by mirroring each point of the curve with +respect to longitudinal axis and connection corresponding curve endpoints by +straight lines. + +\begin{figure} + \centering + \caption{\label{fig:sections}} +\end{figure} + +Ship hull is transformed from analytic to discrete form by using +\emph{intermediate representation} in a form of two-dimensional rectangular +array of points, which makes it easy to obtain triangular mesh. Each ship hull +section is transformed to such an array, then arrays are concatenated. Each row +of the resulting array represents a frame, and each frame is an array of points +of this frame. Since the array have to be rectangular, the number of points +equal the maximum number of points across original frames in VSL file. After +that, endpoints are added to make curves closed, and the whole array is +mirrored with respect to longitudinal axis. Then each rectangular patch of the +resulting array is divided into two triangles to obtain triangular mesh. +Duplicate vertices and faces, that may have been introduced by mirroring or +making curves closed, are removed from the mesh. So, intermediate +representation is easy to transform to a triangular mesh, but all frame have to +have the same number of points in order to transform them to such a +representation. + +It is straightforward to transform main section to a rectangular array of +points in one stage. First, we determine the maximum number of points in a +frame across all ship hull frames. Then for each frame we use cubic Hermite +spline interpolation to generate the specified number of points. If each frame +has the same number of point, we generate the same points that the original +frame had, because the spline goes through all of them. + +In contrast to the main section, transformation of bow and aft sections is done +in multiple stages. During the first stage we generate intermediate points +between subsequent frames using the curve describing the ship hull shape in +longitudinal plane. For that purpose we create a polygon in longitudinal plane +(fig.~\ref{fig:polygon}) that consists of all points of this curve, all points +of the frame that is the closest to the curve endpoints, but does not cross the +curve, and all endpoints of the frames that are between this frame and the +curve (it happens when first and last endpoint of the curve are close to +different frames). Frame points that lie outside this polygon are removed. +Polygon points that lie between subsequent frames become intermediate points. +At this stage we decompose a bow/aft section into a collection of +``rectangular'' patches vertical sides of which are curves created from +subsequent frames and horizontal sides of which are curves created from +intermediate points. + +\begin{figure} + \centering + \caption{\label{fig:polygon}} +\end{figure} + +A patch that is defined by four curves is called Coons +patch~\cite{coons1967surfaces}. Coons patch is a parametric surface \(S(u,v)\) +between four curves \(c_0(u)\), \(c_1(u)\), \(d_0(v)\), \(d_1(v)\): +\begin{align*} + & S(u,v) = C_1(u,v) + C_2(u,v) - C_3(u,v), \\ + & C_1(u,v) = v' c_0(u) + v c_1(u), \quad v' = 1-v, \\ + & C_2(u,v) = u' d_0(v) + u d_1(v), \quad u' = 1-u, \\ + & C_3(u,v) = + c_0(0)u'v' + + c_0(1)uv' + + c_1(0)u'v + + c_1(1)uv, \\ + & c_0(0) = d_0(0), + \quad c_0(1) = d_1(0), \quad c_1(0) = d_0(1), + \quad c_1(1) = d_1(1). +\end{align*} +Here \(C_1\) is linear interpolation between points \(c_0(u)\) and \(c_1(u)\), +\(C_2\) is linear interpolation between points \(d_0(v)\) and \(d_1(v)\), and +\(C_3\) is bilinear interpolation between corner points of the patch. \(C_1\) +and \(C_2\) are ruled surfaces~--- surfaces between two curves, that generated +by interpolating corresponding curve points. Bicubic interpolation can be used +instead of bilinear to get the same derivative when joining multiple Coons +patches together, but for a grid of interior points linear interpolation is +enough. + +Using these formulae we generate a grid of interior points between curves of +each bow/aft patch during the second stage. Our first approach was use one +Coons patch for each subsequent pair of frames, but we have found that some +ship hulls have horizontal curves with large curvatures which cause linear +interpolation to produce cusps on the resulting surface (fig.~\ref{fig:cusp}). +We solved this problem by using multiple vertically arranged Coons patches for +each subsequent pair of frames. This approach removes the cusps, but the +vertical size of the patch have to be small enough to reduce effect of large +curvature of the horizontal curve. We concatenate grids of subsequent frames' +grids to obtain rectangular array for bow/aft sections. + +\begin{figure} + \centering + \caption{\label{fig:cusp}} +\end{figure} + +After transforming each section of the ship hull into a rectangular array and +concatenating them, we obtain an array of dimensions \(m\times{}n\). We then +use two-dimensional cubic Hermite spline interpolation to generate a grid of +\((2m-1)\times{}(2n-1)\) points. Additional points increase surface smoothness +and provide better approximation for the original ship hull. Finally, we +transform the resulting grid into triangular mesh to obtain three-dimensional +discrete ship hull model, which is ready for use in ship motion simulation and +visualisation. \section{Results} @@ -81,7 +194,7 @@ a better representation because they \section{Conclusion} -\subsubsection*{Acknowledgments.} +\subsubsection*{Acknowledgements.} Research work is supported by Saint Petersburg State University (grant no.~26520170). diff --git a/references.bib b/references.bib @@ -1,6 +1,6 @@ @Misc{ hull2010, - title = {Analytical ship hull shape construction, wave resistance + title = {Analytic ship hull shape construction, wave resistance calculations, theoretical blueprint feature curve calculations, and ship stability diagrams (in {Russian})}, author = {Vasily Khramushin}, @@ -18,3 +18,11 @@ url = {http://www1.fips.ru/fips_servl/fips_servlet?DB=EVM&DocNumber=2015621368&TypeFile=html}, fipsnumber = {2015621368} } + + +@techreport{coons1967surfaces, + title={Surfaces for computer-aided design of space forms}, + author={Coons, Steven A}, + year={1967}, + institution={Massachusetts Institute of Technology} +}