Advertisement
Guest User

Untitled

a guest
Apr 24th, 2018
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.66 KB | None | 0 0
  1. public float BSplineBasisFunction(float i, float k, float u)
  2. {
  3. float val = 0f;
  4.  
  5. if (points.Count - 1f - k + 2f == 0f)
  6. {
  7. return 0f;
  8. }
  9. if (u < 1f || u > points.Count - 2f - k + 2f)
  10. {
  11. return 0f;
  12. }
  13.  
  14. if (T(i, k) <= u && T(i + 1, k) >= u)
  15. {
  16. return 1f;
  17. //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));
  18. }
  19. else
  20. {
  21. return 0f;
  22. }
  23.  
  24.  
  25.  
  26. return val;
  27. }
  28. public float T(float i, float k)
  29. {
  30. float t = 0f;
  31. if (i < k)
  32. {
  33. t = 0f;
  34. }
  35. if (i >= k && i <= points.Count - 1)
  36. {
  37. t = i - k + 1;
  38. }
  39. if (i > points.Count - 1)
  40. {
  41. t = (points.Count-1) - k + 2;
  42. }
  43. return t;
  44. }
  45. public void BSpl()
  46. {
  47. float nForBSpline = points.Count-1;
  48. float k = 3f;
  49. float umax=nForBSpline-k+2f;
  50. for(float u=0;u<=umax;u=u+0.1f)
  51. {
  52. float sumX = 0f;
  53. float sumY = 0f;
  54. for (int i = 0; i < nForBSpline; i++)
  55. {
  56.  
  57. sumX=sumX+BSplineBasisFunction(i,k,u)*points[i].x;
  58. sumY = sumY + BSplineBasisFunction(i, k, u) * points[i].y;
  59. Debug.Log(sumX + " " + sumY);
  60. DrawPoint(new Vector2(sumX, sumY), Color.red, false);
  61. }
  62.  
  63. }
  64.  
  65. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement