[Libreoffice-commits] core.git: vcl/source

Luc Castermans luc.castermans at gmail.com
Sun Feb 9 02:24:20 PST 2014


 vcl/source/filter/sgvspln.cxx |  412 ++++++++++++++++++++----------------------
 1 file changed, 202 insertions(+), 210 deletions(-)

New commits:
commit 654f0932b94163dbed9c66bb32f595e8f6cea834
Author: Luc Castermans <luc.castermans at gmail.com>
Date:   Sun Feb 9 10:34:18 2014 +0100

    Translated German comments - polygon and matrix calculations
    
    Change-Id: I3b01520cca854e6504787077a15fbe150eef86d4
    Reviewed-on: https://gerrit.libreoffice.org/7950
    Reviewed-by: Miklos Vajna <vmiklos at collabora.co.uk>
    Tested-by: Miklos Vajna <vmiklos at collabora.co.uk>

diff --git a/vcl/source/filter/sgvspln.cxx b/vcl/source/filter/sgvspln.cxx
index 79c8ae1..167a167 100644
--- a/vcl/source/filter/sgvspln.cxx
+++ b/vcl/source/filter/sgvspln.cxx
@@ -26,58 +26,59 @@
 extern "C" {
 
 /*.pn 277 */
-/*.hlAnhang: C - Programme*/
-/*.hrKonstanten- und Macro-Definitionen*/
-/*.fe Die Include-Datei u_const.h ist in das Verzeichnis zu stellen,  */
-/*.fe wo der Compiler nach Include-Dateien sucht.                     */
+/*.hlAppendix: C - programs*/
+/*.hrConstants- and macrodefinitions*/
+/*.fe The include file u_const.h should be stored in the directory,   */
+/*.fe where the compiler searches for include files.                  */
 
 
 /*-----------------------  FILE u_const.h  ---------------------------*/
 
 #define IEEE
 
-/* IEEE - Norm fuer die Darstellung von Gleitkommazahlen:
+/* IEEE - standard for representation of floating-point numbers:
 
-      8 Byte lange Gleitkommazahlen, mit
+     8 byte long floating point numbers with
 
-     53 Bit Mantisse  ==> Mantissenbereich:    2 hoch 52 versch. Zahlen
-                                               mit 0.1 <= Zahl < 1.0,
-                                               1 Vorzeichen-Bit
-     11 Bit Exponent  ==> Exponentenbereich:  -1024...+1023
+    53 bit mantissa  ==> mantissa range:     2^52 different numbers
+                                              with 0.1 <= number < 1.0,
+                                              1 sign-bit
+    11 bit exponent  ==> exponent range:  -1024...+1023
 
-   Die 1. Zeile ( #define IEEE ) ist zu loeschen, falls die Maschine
-   bzw. der Compiler keine Gleitpunktzahlen gemaess der IEEE-Norm
-   benutzt. Zusaetzlich muessen die Zahlen  MAXEXPON, MINEXPON
-   (s.u.) angepasst werden.
-   */
+  The first line (#define IEEE) should be deleted if the machine
+  or the compiler does not use floating-point numbers according
+  to the IEEE standard. In which case also MAXEXPON, MINEXPON (see
+  below) should be adapted.
+*/
 
-#ifdef IEEE         /*----------- Falls IEEE Norm --------------------*/
+#ifdef IEEE         /*-------------- if IEEE norm --------------------*/
 
-#define MACH_EPS  2.220446049250313e-016   /* Maschinengenauigkeit    */
-                                           /* IBM-AT:  = 2 hoch -52   */
-/* MACH_EPS ist die kleinste positive, auf der Maschine darstellbare
-   Zahl x, die der Bedingung genuegt: 1.0 + x > 1.0                   */
+#define MACH_EPS  2.220446049250313e-016      /* machine precision    */
+                                              /* IBM-AT:  = 2^-52    */
+/* MACH_EPS is the smallest positive,  by the machine representable
+   number x, which fulfills the equation: 1.0 + x > 1.0               */
 
 #define MAXROOT   9.48075190810918e+153
 
-#else               /*------------------ sonst -----------------------*/
+#else               /*------------------ otherwise--------------------*/
 
 double exp  (double);
 double atan (double);
 double pow  (double,double);
 double sqrt (double);
 
-double masch()            /* MACH_EPS maschinenunabhaengig bestimmen  */
+double masch()            /* calculate MACH_EPS machine independence   */
 {
   double eps = 1.0, x = 2.0, y = 1.0;
   while ( y < x )
     { eps *= 0.5;
       x = 1.0 + eps;
     }
-  eps *= 2.0; return (eps);
+  eps *= 2.0;
+  return (eps);
 }
 
-short basis()             /* BASIS maschinenunabhaengig bestimmen     */
+short basis()              /* calculate BASE machine independence     */
 {
   double x = 1.0, one = 1.0, b = 1.0;
 
@@ -87,15 +88,14 @@ short basis()             /* BASIS maschinenunabhaengig bestimmen     */
   return ( (short) ((x + b) - x) );
 }
 
-#define BASIS     basis()                  /* Basis der Zahlendarst.  */
+#define BASIS     basis()           /* base of number representation  */
 
-/* Falls die Maschine (der Compiler) keine IEEE-Darstellung fuer
-   Gleitkommazahlen nutzt, muessen die folgenden 2 Konstanten an-
-   gepasst werden.
+/* If the machine (the compiler) does not use the IEEE-representation
+   for floating-point numbers, the next 2 constants should be adapted.
    */
 
-#define MAXEXPON  1023.0                   /* groesster Exponent      */
-#define MINEXPON -1024.0                   /* kleinster Exponent      */
+#define MAXEXPON  1023.0                    /* largest exponent       */
+#define MINEXPON -1024.0                    /* smallest exponent      */
 
 
 #define MACH_EPS  masch()
@@ -103,45 +103,40 @@ short basis()             /* BASIS maschinenunabhaengig bestimmen     */
 #define POSMAX    pow ((double) BASIS, MAXEXPON)
 #define MAXROOT   sqrt(POSMAX)
 
-#endif              /*-------------- ENDE ifdef ----------------------*/
-
-/* Definition von Funktionsmakros:
-   */
-
-#define abs(X) ((X) >= 0  ?  (X) : -(X))       /* Absolutbetrag von X */
-#define sign(X, Y) (Y < 0 ? -abs(X) : abs(X))  /* Vorzeichen von      */
-                                               /* Y mal abs(X)        */
-
-/*-------------------  ENDE FILE u_const.h  --------------------------*/
-
+#endif              /*-------------- END of ifdef --------------------*/
 
+/* defines for function macros:                                        */
 
+#define abs(X) ((X) >= 0  ?  (X) : -(X))        /* absolute number  X */
+#define sign(X, Y) (Y < 0 ? -abs(X) : abs(X))   /* sign of Y times    */
+                                                /* abs(X)             */
 
+/*--------------------  END of FILE u_const.h  -----------------------*/
 
 
 
 
 
-/*.HL Anhang: C - Programme*/
-/*.HRGleichungssysteme fuer Tridiagonalmatrizen*/
+/*.HL appendix: C - programs*/
+/*.HR Systems of equations for tridiagonal matrices*/
 
-/*.FE  P 3.7 TRIDIAGONALE GLEICHUNGSSYSTEME*/
+/*.FE  P 3.7 tridiagonal systems of equations */
 
 
-/*----------------------   MODUL TRIDIAGONAL  ------------------------*/
+/*----------------------   MODULE tridiagonal  -----------------------*/
 
 sal_uInt16 TriDiagGS(bool rep, sal_uInt16 n, double* lower,
                  double* diag, double* upper, double* b)
-                                              /************************/
-                                              /* GAUSS-Verfahren fuer */
-                                              /* Tridiagonalmatrizen  */
-                                              /************************/
+                                             /*************************/
+                                             /* Gaussian methods for  */
+                                             /* tridiagonal matrices  */
+                                             /*************************/
 
 /*====================================================================*/
 /*                                                                    */
-/*  trdiag bestimmt die Loesung x des linearen Gleichungssystems      */
-/*  A * x = b mit tridiagonaler n x n Koeffizientenmatrix A, die in   */
-/*  den 3 Vektoren lower, upper und diag wie folgt abgespeichert ist: */
+/*  trdiag determines solution x of the system of linear equations    */
+/*  A * x = b with tridiagonal n x n coefficient matrix A, which is   */
+/*  stored in 3 vectors lower, upper and diag as per below:           */
 /*                                                                    */
 /*       ( diag[0]  upper[0]    0        0  .   .     .   0      )    */
 /*       ( lower[1] diag[1]   upper[1]   0      .     .   .      )    */
@@ -154,58 +149,58 @@ sal_uInt16 TriDiagGS(bool rep, sal_uInt16 n, double* lower,
 /*                                                                    */
 /*====================================================================*/
 /*                                                                    */
-/*   Anwendung:                                                       */
-/*   =========                                                        */
-/*      Vorwiegend fuer diagonaldominante Tridiagonalmatrizen, wie    */
-/*      sie bei der Spline-Interpolation auftreten.                   */
-/*      Fuer diagonaldominante Matrizen existiert immer eine LU-      */
-/*      Zerlegung; fuer nicht diagonaldominante Tridiagonalmatrizen   */
-/*      sollte die Funktion band vorgezogen werden, da diese mit      */
-/*      Spaltenpivotsuche arbeitet und daher numerisch stabiler ist.  */
+/*   Usage:                                                           */
+/*   ======                                                           */
+/*      Mainly for diagonal determinant triangular matrix, as they    */
+/*      occur in Spline-interpolations.                               */
+/*      For diagonal dominant matrices always a left-upper row        */
+/*      reduction exists; for non diagonal dominant triangular        */
+/*      matrices we should pull forward the function band, as this    */
+/*      works with row pivot searches, which is numerical more stable.*/
 /*                                                                    */
 /*====================================================================*/
 /*                                                                    */
-/*   Eingabeparameter:                                                */
+/*   Input parameters:                                                */
 /*   ================                                                 */
-/*      n        Dimension der Matrix ( > 1 )  sal_uInt16 n               */
+/*      n        dimension of the matrix ( > 1 )  sal_uInt16 n        */
 /*                                                                    */
-/*      lower    untere Nebendiagonale         double lower[n]        */
-/*      diag     Hauptdiagonale                double diag[n]         */
-/*      upper    obere Nebendiagonale          double upper[n]        */
+/*      lower    lower antidiagonal               double lower[n]     */
+/*      diag     main diagonal                    double diag[n]      */
+/*      upper    upper antidiagonal               double upper[n]     */
 /*                                                                    */
-/*               bei rep = true enthalten lower, diag und upper die   */
-/*               Dreieckzerlegung der Ausgangsmatrix.                 */
+/*               for rep = true lower, diag and upper contain the     */
+/*               triangulation of the start matrix.                   */
 /*                                                                    */
-/*      b        rechte Seite des Systems      double b[n]            */
-/*      rep      = false  erstmaliger Aufruf   bool rep               */
-/*               = true  wiederholter Aufruf                          */
-/*                    fuer gleiche Matrix,                            */
-/*                    aber verschiedenes b.                           */
+/*      b        right side of equation     double b[n]               */
+/*      rep      = false first call         bool rep                  */
+/*               = true  next call                                    */
+/*                    for the same matrix,                            */
+/*                    but different b.                                */
 /*                                                                    */
-/*   Ausgabeparameter:                                                */
-/*   ================                                                 */
-/*      b        Loesungsvektor des Systems;   double b[n]            */
-/*               die urspruengliche rechte Seite wird ueberspeichert  */
+/*   Output parameters:                                               */
+/*   =================                                                */
+/*      b        solution vector of the system;   double b[n]         */
+/*               the original right side is overwritten               */
 /*                                                                    */
-/*      lower    ) enthalten bei rep = false die Zerlegung der Matrix;*/
-/*      diag     ) die urspruenglichen Werte von lower u. diag werden */
-/*      upper    ) ueberschrieben                                     */
+/*      lower    ) contain for rep = false the decomposition of the   */
+/*      diag     ) matrix; the original values of the lower and       */
+/*      upper    ) diagonals are overwritten                          */
 /*                                                                    */
-/*   Die Determinante der Matrix ist bei rep = false durch            */
-/*      det A = diag[0] * ... * diag[n-1] bestimmt.                   */
+/*   The determinant of the matrix is for rep = false defined by      */
+/*      determinant A = diag[0] * ... * diag[n-1]                     */
 /*                                                                    */
-/*   Rueckgabewert:                                                   */
+/*   Return value:                                                    */
 /*   =============                                                    */
-/*      = 0      alles ok                                             */
-/*      = 1      n < 2 gewaehlt                                       */
-/*      = 2      Die Dreieckzerlegung der Matrix existiert nicht      */
+/*      = 0      all ok                                               */
+/*      = 1      n < 2 chosen                                         */
+/*      = 2      triangular decomposition of matrix does not exist    */
 /*                                                                    */
 /*====================================================================*/
 /*                                                                    */
-/*   Benutzte Funktionen:                                             */
-/*   ===================                                              */
+/*   Functions used:                                                  */
+/*   ===============                                                  */
 /*                                                                    */
-/*   Aus der C Bibliothek: fabs()                                     */
+/*   From the C library: fabs()                                       */
 /*                                                                    */
 /*====================================================================*/
 
@@ -216,26 +211,28 @@ sal_uInt16 TriDiagGS(bool rep, sal_uInt16 n, double* lower,
 
 // double fabs(double);
 
- if ( n < 2 ) return(1);                    /*  n mindestens 2        */
+ if ( n < 2 ) return(1);                    /*  n at least 2          */
 
-                                            /*  Wenn rep = false ist, */
-                                            /*  Dreieckzerlegung der  */
- if (!rep)                                  /*  Matrix u. det be-     */
-   {                                        /*  stimmen               */
+                                            /*  if rep = false,       */
+                                            /*  determine the         */
+                                            /*  triangular            */
+                                            /*  decomposition of      */
+ if (!rep)                                  /*  matrix and determinant*/
+   {
      for (i = 1; i < n; i++)
-       { if ( fabs(diag[i-1]) < MACH_EPS )  /*  Wenn ein diag[i] = 0  */
-           return(2);                       /*  ist, ex. keine Zerle- */
-         lower[i] /= diag[i-1];             /*  gung.                 */
+       { if ( fabs(diag[i-1]) < MACH_EPS )  /*  do not decompose      */
+           return(2);                       /*  if one diag[i] = 0    */
+         lower[i] /= diag[i-1];
          diag[i] -= lower[i] * upper[i-1];
        }
     }
 
  if ( fabs(diag[n-1]) < MACH_EPS ) return(2);
 
- for (i = 1; i < n; i++)                   /*  Vorwaertselimination  */
+ for (i = 1; i < n; i++)                    /* forward elimination    */
     b[i] -= lower[i] * b[i-1];
 
- b[n-1] /= diag[n-1];                      /* Rueckwaertselimination */
+ b[n-1] /= diag[n-1];                       /* reverse elimination    */
  for (j = n-2; j >= 0; j--) {
     i=j;
     b[i] = ( b[i] - upper[i] * b[i+1] ) / diag[i];
@@ -243,7 +240,7 @@ sal_uInt16 TriDiagGS(bool rep, sal_uInt16 n, double* lower,
  return(0);
 }
 
-/*-----------------------  ENDE TRIDIAGONAL  -------------------------*/
+/*-----------------------  END OF TRIDIAGONAL  ------------------------*/
 
 
 
@@ -253,28 +250,28 @@ sal_uInt16 TriDiagGS(bool rep, sal_uInt16 n, double* lower,
 
 
 
-/*.HL Anhang: C - Programme*/
-/*.HRGleichungssysteme mit zyklisch tridiagonalen Matrizen*/
+/*.HL Appendix: C - Programs*/
+/*.HRSystems of equations with cyclic tridiagonal matrices*/
 
-/*.FE  P 3.8  SYSTEME MIT ZYKLISCHEN TRIDIAGONALMATRIZEN */
+/*.FE  P 3.8  Systems with cyclic tridiagonal matrices    */
 
 
-/*----------------  MODUL ZYKLISCH TRIDIAGONAL  ----------------------*/
+/*----------------  Module cyclic tridiagonal  -----------------------*/
 
 
 sal_uInt16 ZyklTriDiagGS(bool rep, sal_uInt16 n, double* lower, double* diag,
                      double* upper, double* lowrow, double* ricol, double* b)
                                         /******************************/
-                                        /* Systeme mit zyklisch tri-  */
-                                        /* diagonalen Matrizen        */
+                                        /* Systems with cyclic        */
+                                        /* tridiagonal matrices       */
                                         /******************************/
 
 /*====================================================================*/
 /*                                                                    */
-/*  tzdiag bestimmt die Loesung x des linearen Gleichungssystems      */
-/*  A * x = b mit zyklisch tridiagonaler n x n Koeffizienten-         */
-/*  matrix A, die in den 5 Vektoren lower, upper, diag, lowrow und    */
-/*  ricol wie folgt abgespeichert ist:                                */
+/*  tzdiag determines the solution x of the linear equation system    */
+/*  A * x = b with cyclic tridiagonal  n x n coefficient-             */
+/*  matrix A, which is stored in the 5 vectors: lower, upper, diag,   */
+/*  lowrow and ricol as per below:                                    */
 /*                                                                    */
 /*       ( diag[0]  upper[0]    0        0  .   . 0   ricol[0]   )    */
 /*       ( lower[1] diag[1]   upper[1]   0      .     .   0      )    */
@@ -285,60 +282,59 @@ sal_uInt16 ZyklTriDiagGS(bool rep, sal_uInt16 n, double* lower, double* diag,
 /*       (   0               .             .        . upper[n-2] )    */
 /*       ( lowrow[0]  0 .  .    0        lower[n-1]   diag[n-1]  )    */
 /*                                                                    */
-/*  Speicherplatz fuer lowrow[1],..,lowrow[n-3] und ricol[1],...,     */
-/*  ricol[n-3] muss zusaetzlich bereitgestellt werden, da dieser      */
-/*  fuer die Aufnahme der Zerlegungsmatrix verfuegbar sein muss, die  */
-/*  auf die 5 genannten Vektoren ueberspeichert wird.                 */
+/*  Memory for lowrow[1],..,lowrow[n-3] und ricol[1],...,ricol[n-3]   */
+/*  should be provided separately, as this should be available to     */
+/*  store the decomposition matrix, which is overwritting             */
+/*  the 5 vectors mentioned.                                          */
 /*                                                                    */
 /*====================================================================*/
 /*                                                                    */
-/*   Anwendung:                                                       */
-/*   =========                                                        */
-/*      Vorwiegend fuer diagonaldominante zyklische Tridiagonalmatri- */
-/*      zen wie sie bei der Spline-Interpolation auftreten.           */
-/*      Fuer diagonaldominante Matrizen existiert immer eine LU-      */
-/*      Zerlegung.                                                    */
+/*   Usage:                                                           */
+/*   ======                                                           */
+/*      Predominantly for diagonal dominant cyclic tridiagonal-       */
+/*      matrices as they occur in spline-interpolations.              */
+/*      For diagonal dominant matices only a LU-decomposition exists. */
 /*                                                                    */
 /*====================================================================*/
 /*                                                                    */
-/*   Eingabeparameter:                                                */
-/*   ================                                                 */
-/*      n        Dimension der Matrix ( > 2 )  sal_uInt16 n               */
-/*      lower    untere Nebendiagonale         double lower[n]        */
-/*      diag     Hauptdiagonale                double diag[n]         */
-/*      upper    obere Nebendiagonale          double upper[n]        */
-/*      b        rechte Seite des Systems      double b[n]            */
-/*      rep      = false  erstmaliger Aufruf   bool rep               */
-/*               = true  wiederholter Aufruf                          */
-/*                    fuer gleiche Matrix,                            */
-/*                    aber verschiedenes b.                           */
-/*                                                                    */
-/*   Ausgabeparameter:                                                */
-/*   ================                                                 */
-/*      b        Loesungsvektor des Systems,   double b[n]            */
-/*               die urspruengliche rechte Seite wird ueberspeichert  */
-/*                                                                    */
-/*      lower    ) enthalten bei rep = false die Zerlegung der Matrix;*/
-/*      diag     ) die urspruenglichen Werte von lower u. diag werden */
-/*      upper    ) ueberschrieben                                     */
+/*   Input parameters:                                                */
+/*   =================                                                */
+/*      n        Dimension of the matrix ( > 2 )  sal_uInt16 n        */
+/*      lower    lower antidiagonal               double lower[n]     */
+/*      diag     main diagonal                    double diag[n]      */
+/*      upper    upper antidiagonal               double upper[n]     */
+/*      b        right side of the system         double b[n]         */
+/*      rep      = FALSE first call               bool rep            */
+/*               = TRUE  repeated call                                */
+/*                    for equal matrix,                               */
+/*                    but different b.                                */
+/*                                                                    */
+/*   Output parameters:                                               */
+/*   ==================                                               */
+/*      b        solution vector of the system,   double b[n]         */
+/*               the original right side is overwritten               */
+/*                                                                    */
+/*      lower    ) contain for rep = false the solution of the matrix;*/
+/*      diag     ) the original values of lower and diagonal will be  */
+/*      upper    ) overwritten                                        */
 /*      lowrow   )                             double lowrow[n-2]     */
 /*      ricol    )                             double ricol[n-2]      */
 /*                                                                    */
-/*   Die Determinante der Matrix ist bei rep = false durch            */
-/*      det A = diag[0] * ... * diag[n-1]     bestimmt.               */
+/*   The determinant of the matrix is for rep = false                 */
+/*      det A = diag[0] * ... * diag[n-1]     defined .               */
 /*                                                                    */
-/*   Rueckgabewert:                                                   */
+/*   Return value:                                                    */
 /*   =============                                                    */
-/*      = 0      alles ok                                             */
-/*      = 1      n < 3 gewaehlt                                       */
-/*      = 2      Die Zerlegungsmatrix existiert nicht                 */
+/*      = 0      all ok                                               */
+/*      = 1      n < 3 chosen                                         */
+/*      = 2      Decomposition matrix does not exist                  */
 /*                                                                    */
 /*====================================================================*/
 /*                                                                    */
-/*   Benutzte Funktionen:                                             */
-/*   ===================                                              */
+/*   Used functions:                                                  */
+/*   ===============                                                  */
 /*                                                                    */
-/*   Aus der C Bibliothek: fabs()                                     */
+/*   from the C library: fabs()                                       */
 /*                                                                    */
 /*====================================================================*/
 
@@ -350,15 +346,15 @@ sal_uInt16 ZyklTriDiagGS(bool rep, sal_uInt16 n, double* lower, double* diag,
 
  if ( n < 3 ) return(1);
 
- if (!rep)                                  /*  Wenn rep = false ist, */
-   {                                        /*  Zerlegung der         */
-     lower[0] = upper[n-1] = 0.0;           /*  Matrix berechnen.     */
+ if (!rep)                               /*  If rep = false,          */
+   {                                     /*  calculate decomposition  */
+     lower[0] = upper[n-1] = 0.0;        /*  of the matrix.           */
 
      if ( fabs (diag[0]) < MACH_EPS ) return(2);
-                                          /* Ist ein Diagonalelement  */
-     temp = 1.0 / diag[0];                /* betragsmaessig kleiner   */
-     upper[0] *= temp;                    /* MACH_EPS, so ex. keine   */
-     ricol[0] *= temp;                    /* Zerlegung.               */
+                                         /* Do not decompose if the   */
+     temp = 1.0 / diag[0];               /* value of a diagonal       */
+     upper[0] *= temp;                   /* element is smaller then   */
+     ricol[0] *= temp;                   /* MACH_EPS                  */
 
      for (i = 1; i < n-2; i++)
        { diag[i] -= lower[i] * upper[i-1];
@@ -384,7 +380,7 @@ sal_uInt16 ZyklTriDiagGS(bool rep, sal_uInt16 n, double* lower, double* diag,
      if ( fabs(diag[n-1]) < MACH_EPS ) return(2);
    }
 
- b[0] /= diag[0];                          /* Vorwaertselemination    */
+ b[0] /= diag[0];                          /* forward elimination    */
  for (i = 1; i < n-1; i++)
    b[i] = ( b[i] - b[i-1] * lower[i] ) / diag[i];
 
@@ -393,7 +389,7 @@ sal_uInt16 ZyklTriDiagGS(bool rep, sal_uInt16 n, double* lower, double* diag,
 
  b[n-1] = ( b[n-1] + temp - lower[n-1] * b[n-2] ) / diag[n-1];
 
- b[n-2] -= b[n-1] * upper[n-2];            /* Rueckwaertselimination  */
+ b[n-2] -= b[n-1] * upper[n-2];            /* backward elimination   */
  for (j = n-3; j >= 0; j--) {
    i=j;
    b[i] -= upper[i] * b[i+1] + ricol[i] * b[n-1];
@@ -401,7 +397,7 @@ sal_uInt16 ZyklTriDiagGS(bool rep, sal_uInt16 n, double* lower, double* diag,
  return(0);
 }
 
-/*------------------  ENDE ZYKLISCH TRIDIAGONAL  ---------------------*/
+/*------------------  END of CYCLIC TRIDIAGONAL  ---------------------*/
 
 
 } // extern "C"
@@ -411,8 +407,8 @@ sal_uInt16 ZyklTriDiagGS(bool rep, sal_uInt16 n, double* lower, double* diag,
 |*
 |*    NaturalSpline()
 |*
-|*    Beschreibung      Berechnet die Koeffizienten eines natuerlichen
-|*                      kubischen Polynomsplines mit n Stuetzstellen.
+|*    Description       calculates the coefficients of natural
+|*                      cubic splines with n intervals.
 |*
 *************************************************************************/
 
@@ -517,15 +513,15 @@ sal_uInt16 NaturalSpline(sal_uInt16 n, double* x, double* y,
 |*
 |*    PeriodicSpline()
 |*
-|*    Beschreibung      Berechnet die Koeffizienten eines periodischen
-|*                      kubischen Polynomsplines mit n Stuetzstellen.
+|*    Description       calculates the coefficients of periodical
+|*                      cubic splines with n intervals.
 |*
 *************************************************************************/
 
 
 sal_uInt16 PeriodicSpline(sal_uInt16 n, double* x, double* y,
                       double* b, double* c, double* d)
-{                     // Arrays muessen von [0..n] dimensioniert sein!
+{                     // array dimensions should range from [0..n]!
     sal_uInt16  Error;
     sal_uInt16  i,im1,nm1; //integer
     double  hr,hl;
@@ -535,8 +531,8 @@ sal_uInt16 PeriodicSpline(sal_uInt16 n, double* x, double* y,
 
     if (n<2) return 4;
     nm1=n-1;
-    for (i=0;i<=nm1;i++) if (x[i+1]<=x[i]) return 2; // muss streng nonoton fallend sein!
-    if (y[n]!=y[0]) return 3; // Anfang muss gleich Ende sein!
+    for (i=0;i<=nm1;i++) if (x[i+1]<=x[i]) return 2; // should be strictly monotonically decreasing!
+    if (y[n]!=y[0]) return 3; // begin and end should be equal!
 
     a     =new double[n+1];
     lowrow=new double[n+1];
@@ -593,9 +589,8 @@ sal_uInt16 PeriodicSpline(sal_uInt16 n, double* x, double* y,
 |*
 |*    ParaSpline()
 |*
-|*    Beschreibung      Berechnet die Koeffizienten eines parametrischen
-|*                      natuerlichen oder periodischen kubischen
-|*                      Polynomsplines mit n Stuetzstellen.
+|*    Description       calculate the coefficients of parametric
+|*                      natural of periodical cubic splines with n intervals
 |*
 *************************************************************************/
 
@@ -613,13 +608,13 @@ sal_uInt16 ParaSpline(sal_uInt16 n, double* x, double* y, sal_uInt8 MargCond,
            betX = 0,betY = 0;
 
     if (n<2) return 1;
-    if ((MargCond & ~3) && (MargCond != 4)) return 2; // ungueltige Randbedingung
+    if ((MargCond & ~3) && (MargCond != 4)) return 2; // invalid boundary condition
     if (!CondT) {
         T[0]=0.0;
         for (i=0;i<n;i++) {
             deltX=x[i+1]-x[i]; deltY=y[i+1]-y[i];
             delt =deltX*deltX+deltY*deltY;
-            if (delt<=0.0) return 3;            // zwei identische Punkte nacheinander!
+            if (delt<=0.0) return 3;            // two identical adjacent points!
             T[i+1]=T[i]+sqrt(delt);
         }
     }
@@ -670,17 +665,14 @@ sal_uInt16 ParaSpline(sal_uInt16 n, double* x, double* y, sal_uInt8 MargCond,
 |*
 |*    CalcSpline()
 |*
-|*    Beschreibung      Berechnet die Koeffizienten eines parametrischen
-|*                      natuerlichen oder periodischen kubischen
-|*                      Polynomsplines. Die Eckpunkte des uebergebenen
-|*                      Polygons werden als Stuetzstellen angenommen.
-|*                      n liefert die Anzahl der Teilpolynome.
-|*                      Ist die Berechnung fehlerfrei verlaufen, so
-|*                      liefert die Funktion true. Nur in diesem Fall
-|*                      ist Speicher fuer die Koeffizientenarrays
-|*                      allokiert, der dann spaeter vom Aufrufer mittels
-|*                      delete freizugeben ist.
-|*
+|*    Description       Calculates the coefficients of parametrised
+|*                      natural or periodic cubic polynom-splines.
+|*                      The corner points of the polygon passed are used
+|*                      as support points. n returns the number of partial polynoms.
+|*                      This function returns TRUE if no error occured.
+|*                      Only in this case memory for the coefficient array
+|*                      has been allocated, which can be freed by the caller
+|*                      using a delete.
 *************************************************************************/
 
 bool CalcSpline(Polygon& rPoly, bool Periodic, sal_uInt16& n,
@@ -729,7 +721,7 @@ bool CalcSpline(Polygon& rPoly, bool Periodic, sal_uInt16& n,
     Marg01=0.0;
     MargN1=0.0;
     MargN2=0.0;
-    if (n>0) n--; // n Korregieren (Anzahl der Teilpolynome)
+    if (n>0) n--; // correct n (number of partial polynoms)
 
     bool bRet = false;
     if ( ( Marg == 3 && n >= 3 ) || ( Marg == 2 && n >= 2 ) )
@@ -757,23 +749,23 @@ bool CalcSpline(Polygon& rPoly, bool Periodic, sal_uInt16& n,
 |*
 |*    Spline2Poly()
 |*
-|*    Beschreibung      Konvertiert einen parametrichen kubischen
-|*                      Polynomspline Spline (natuerlich oder periodisch)
-|*                      in ein angenaehertes Polygon.
-|*                      Die Funktion liefert false, wenn ein Fehler bei
-|*                      der Koeffizientenberechnung aufgetreten ist oder
-|*                      das Polygon zu gross wird (>PolyMax=16380). Im 1.
-|*                      Fall hat das Polygon 0, im 2. Fall PolyMax Punkte.
-|*                      Um Koordinatenueberlaeufe zu vermeiden werden diese
-|*                      auf +/-32000 begrenzt.
+|*    Description       converts a parametrised cubic spline (natural
+|*                      or periodic) to an approximate polygon.
+|*                      The function returns false, if an error occured
+|*                      during the calculation of the coefficients or
+|*                      the polygon became too large (>PolyMax=16380).
+|*                      In the first case the polygon has 0, in the
+|*                      second case PolyMax points.
+|*                      To prevent coordinate overflows we limit
+|*                      them to +/-32000.
 |*
 *************************************************************************/
 bool Spline2Poly(Polygon& rSpln, bool Periodic, Polygon& rPoly)
 {
-    short  MinKoord=-32000; // zur Vermeidung
-    short  MaxKoord=32000;  // von Ueberlaeufen
+    short  MinKoord=-32000;    // to prevent
+    short  MaxKoord=32000;     // overflows
 
-    double* ax;          // Koeffizienten der Polynome
+    double* ax;                // coefficients of the polynoms
     double* ay;
     double* bx;
     double* by;
@@ -783,27 +775,27 @@ bool Spline2Poly(Polygon& rSpln, bool Periodic, Polygon& rPoly)
     double* dy;
     double* tv;
 
-    double  Step;        // Schrittweite fuer t
-    double  dt1,dt2,dt3; // Delta t, y, ^3
-    double  t;
-    bool    bEnde;       // Teilpolynom zu Ende?
-    sal_uInt16  n;           // Anzahl der zu zeichnenden Teilpolynome
-    sal_uInt16  i;           // aktuelles Teilpolynom
-    bool    bOk;         // noch alles ok?
-    sal_uInt16  PolyMax=16380;// Maximale Anzahl von Polygonpunkten
-    long    x,y;
+    double      Step;          // stepsize for t
+    double      dt1,dt2,dt3;   // delta t, y, ^3
+    double      t;
+    bool        bEnde;         // partial polynom ended?
+    sal_uInt16  n;             // number of partial polynoms to draw
+    sal_uInt16  i;             // actual partial polynom
+    bool        bOk;           // all still ok?
+    sal_uInt16  PolyMax=16380; // max number of polygon points
+    long        x,y;
 
     bOk=CalcSpline(rSpln,Periodic,n,ax,ay,bx,by,cx,cy,dx,dy,tv);
     if (bOk) {
         Step =10;
 
         rPoly.SetSize(1);
-        rPoly.SetPoint(Point(short(ax[0]),short(ay[0])),0); // erster Punkt
+        rPoly.SetPoint(Point(short(ax[0]),short(ay[0])),0); // first point
         i=0;
-        while (i<n) {       // n Teilpolynome malen
+        while (i<n) {       // draw n partial polynoms
             t=tv[i]+Step;
             bEnde=false;
-            while (!bEnde) {  // ein Teilpolynom interpolieren
+            while (!bEnde) {  // extrapolate one partial polynom
                 bEnde=t>=tv[i+1];
                 if (bEnde) t=tv[i+1];
                 dt1=t-tv[i]; dt2=dt1*dt1; dt3=dt2*dt1;
@@ -815,11 +807,11 @@ bool Spline2Poly(Polygon& rSpln, bool Periodic, Polygon& rPoly)
                     rPoly.SetSize(rPoly.GetSize()+1);
                     rPoly.SetPoint(Point(short(x),short(y)),rPoly.GetSize()-1);
                 } else {
-                    bOk=false; // Fehler: Polygon wird zu gross
+                    bOk=false; // error: polygon becomes to large
                 }
                 t=t+Step;
-            } // Ende von Teilpolynom
-            i++; // naechstes Teilpolynom
+            } // end of partial polynom
+            i++; // next partial polynom
         }
         delete[] ax;
         delete[] ay;
@@ -831,7 +823,7 @@ bool Spline2Poly(Polygon& rSpln, bool Periodic, Polygon& rPoly)
         delete[] dy;
         delete[] tv;
         return bOk;
-    } // Ende von if (bOk)
+    } // end of if (bOk)
     rPoly.SetSize(0);
     return false;
 }


More information about the Libreoffice-commits mailing list