Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public float BSplineBasisFunction(float i, float k, float u)
- {
- float val = 0f;
- if (points.Count - 1f - k + 2f == 0f)
- {
- return 0f;
- }
- if (u < 1f || u > points.Count - 2f - k + 2f)
- {
- return 0f;
- }
- if (T(i, k) <= u && T(i + 1, k) >= u)
- {
- return 1f;
- //val = (((u - T(i, k)) * BSplineBasisFunction(i, k - 1, u)) / T(i + k - 1, k) - T(i, k)) + (((T(i + k, k) - u) * BSplineBasisFunction(i + 1, k - 1, u)) / T(i + k, k) - T(i + 1, k));
- }
- else
- {
- return 0f;
- }
- return val;
- }
- public float T(float i, float k)
- {
- float t = 0f;
- if (i < k)
- {
- t = 0f;
- }
- if (i >= k && i <= points.Count - 1)
- {
- t = i - k + 1;
- }
- if (i > points.Count - 1)
- {
- t = (points.Count-1) - k + 2;
- }
- return t;
- }
- public void BSpl()
- {
- float nForBSpline = points.Count-1;
- float k = 3f;
- float umax=nForBSpline-k+2f;
- for(float u=0;u<=umax;u=u+0.1f)
- {
- float sumX = 0f;
- float sumY = 0f;
- for (int i = 0; i < nForBSpline; i++)
- {
- sumX=sumX+BSplineBasisFunction(i,k,u)*points[i].x;
- sumY = sumY + BSplineBasisFunction(i, k, u) * points[i].y;
- Debug.Log(sumX + " " + sumY);
- DrawPoint(new Vector2(sumX, sumY), Color.red, false);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement