Advertisement
Guest User

Untitled

a guest
Mar 26th, 2017
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.24 KB | None | 0 0
  1. struct BezierSurface {
  2. std::vector<BezierCurve> bcs;
  3. public:
  4. void AddCurve(BezierCurve bc) {
  5. bcs.push_back(bc);
  6. }
  7. float B(int i, float t) {
  8. int n = bcs.size()-1;
  9. float choose = 1;
  10. for (int j = 1; j <= i; j++)
  11. choose *= (float)(n - j + 1) / j;
  12. return choose * pow(t, i) * pow(1 - t, n - i);
  13. }
  14. float Bd(int i, float t) {
  15. return (bcs.size() - 1)*(B(i - 1, bcs.size() - 1) - B(i, bcs.size() - 1));
  16. }
  17. vec4 r(float t, float u) {
  18. vec4 rr(0, 0, 0);
  19. for (unsigned int i = 0; i < bcs.size(); i++){
  20. for (unsigned int j = 0; j < bcs[i].cps.size(); j++){
  21. rr = rr + bcs[i].cps[j] * B(i, u)*B(j, t);
  22. }
  23. }
  24. return rr;
  25. }
  26. vec4 Dt(float t, float u) {
  27. vec4 rr(0, 0, 0);
  28. for (unsigned int i = 0; i < bcs.size(); i++) {
  29. for (unsigned int j = 0; j < bcs[i].cps.size(); j++) {
  30. rr = rr + bcs[i].cps[j] * B(i, u) * Bd(j, t);
  31. }
  32. }
  33. printf("%f, %f, %f\n", rr.v[0], rr.v[1], rr.v[2]);
  34. return rr;
  35. }
  36. vec4 Du(float t, float u) {
  37. vec4 rr(0, 0, 0);
  38. for (unsigned int i = 0; i < bcs.size(); i++) {
  39. for (unsigned int j = 0; j < bcs[i].cps.size(); j++) {
  40. rr = rr + bcs[i].cps[j] * Bd(i, u) * B(j, t);
  41. }
  42. }
  43. printf("%f, %f, %f\n", rr.v[0], rr.v[1], rr.v[2]);
  44. return rr;
  45. }
  46. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement