2010-07-28 5 views
0

Pouvez-vous m'aider à convertir ce code C# en Objective-C? Je n'ai pas la moindre idée de C#/Visual Studio!iPhone: Conversion du code C# en Objective-C

public static class BezierSpline 
{ 

public static void GetCurveControlPoints(Point[] knots, 
     out Point[] firstControlPoints, out Point[] secondControlPoints) 
    { 
     int n = knots.Length - 1; 

     // Calculate first Bezier control points 
     // Right hand side vector 
     double[] rhs = new double[n]; 

     // Set right hand side X values 
     for (int i = 1; i < n - 1; ++i) 
      rhs[i] = 4 * knots[i].X + 2 * knots[i + 1].X; 
     rhs[0] = knots[0].X + 2 * knots[1].X; 
     rhs[n - 1] = (8 * knots[n - 1].X + knots[n].X)/2.0; 
     // Get first control points X-values 
     double[] x = GetFirstControlPoints(rhs); 

     // Set right hand side Y values 
     for (int i = 1; i < n - 1; ++i) 
      rhs[i] = 4 * knots[i].Y + 2 * knots[i + 1].Y; 
     rhs[0] = knots[0].Y + 2 * knots[1].Y; 
     rhs[n - 1] = (8 * knots[n - 1].Y + knots[n].Y)/2.0; 
     // Get first control points Y-values 
     double[] y = GetFirstControlPoints(rhs); 

     // Fill output arrays. 
     firstControlPoints = new Point[n]; 
     secondControlPoints = new Point[n]; 
     for (int i = 0; i < n; ++i) 
     { 
      // First control point 
      firstControlPoints[i] = new Point(x[i], y[i]); 
      // Second control point 
      if (i < n - 1) 
       secondControlPoints[i] = new Point(2 * knots 
        [i + 1].X - x[i + 1], 2 * 
        knots[i + 1].Y - y[i + 1]); 
      else 
       secondControlPoints[i] = new Point((knots 
        [n].X + x[n - 1])/2, 
        (knots[n].Y + y[n - 1])/2); 
     } 
    } 

    private static double[] GetFirstControlPoints(double[] rhs) 
    { 
     int n = rhs.Length; 
     double[] x = new double[n]; // Solution vector. 
     double[] tmp = new double[n]; // Temp workspace. 

     double b = 2.0; 
     x[0] = rhs[0]/b; 
     for (int i = 1; i < n; i++) // Decomposition and forward substitution. 
     { 
      tmp[i] = 1/b; 
      b = (i < n - 1 ? 4.0 : 3.5) - tmp[i]; 
      x[i] = (rhs[i] - x[i - 1])/b; 
     } 
     for (int i = 1; i < n; i++) 
      x[n - i - 1] -= tmp[n - i] * x[n - i]; // Backsubstitution. 

     return x; 
    } 
} 

merci.

+0

Cela s'appelle C#. Et il semble assez simple, juste déconner avec un tableau de points/chiffres. – Mau

+0

Je soupçonnais que ça avait quelque chose à voir avec une saveur de C ... – SpaceDog

+0

Qu'est-ce qui vous pose problème? Tout me semble assez simple. – JeremyP

Répondre

0

double [] tmp = nouveau double [n];

tmp est un tableau de longueur n. Chaque valeur n'est pas initialisée explicitement, mais elle est implicitement définie sur la valeur par défaut du type double, qui est 0. Ainsi, tmp est un tableau de longueur n de zéros. {0,0,0,0,0, ... 0}