iPhone:将C#代码转换为Objective-C

时间:2010-07-28 12:42:43

标签: c# iphone objective-c

你们能帮助我将这个C#代码转换为Objective-C吗? 我对C#/ Visual Studio没有任何线索!

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;
    }
}

感谢。

1 个答案:

答案 0 :(得分:0)

double [] tmp = new double [n];

tmp是长度为n的数组。每个值都没有显式初始化,但它隐式设置为double类型的默认值,即0。因此tmp是n长度的零数组。 {0,0,0,0,0,... 0}