Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- static void spline(float[] x, float[] y, int n, float ld, bool lnat, float rd, bool rnat, float[] y2)
- {
- int i, k;
- float p, qn, sig, un;
- float[] u = new float[n];
- if (lnat)
- y2[0] = u[0] = 0.0f;
- else {
- y2[0] = -0.5f;
- u[0] = (3.0f / (x[1] - x[0])) * ((y[1] - y[0]) / (x[1] - x[0]) - ld);
- }
- for (i = 1; i < n - 1; ++i) {
- sig = (x[i] - x[i - 1]) / (x[i + 1] - x[i - 1]);
- p = sig * y2[i - 1] + 2.0f;
- y2[i] = (sig - 1.0f) / p;
- u[i] = (y[i + 1] - y[i]) / (x[i + 1] - x[i]) - (y[i] - y[i - 1]) / (x[i] - x[i - 1]);
- u[i] = (6.0f * u[i] / (x[i + 1] - x[i - 1]) - sig * u[i - 1]) / p;
- }
- if (rnat)
- qn = un = 0.0f;
- else {
- qn = 0.5f;
- un = (3.0f / (x[n - 1] - x[n - 2])) * (rd - (y[n - 1] - y[n - 2]) / (x[n - 1] - x[n - 2]));
- }
- y2[n - 1] = (un - qn * u[n - 2]) / (qn * y2[n - 2] + 1.0f);
- for (k = n - 2; k >= 0; --k)
- y2[k] = y2[k] * y2[k + 1] + u[k];
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement