Advertisement
ehzcl

Untitled

Nov 20th, 2019
127
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.34 KB | None | 0 0
  1. // ele recebe o array de pontos de controle e o
  2.  
  3. /*
  4. Input: array P[0:n] of n+1 points and real number u in [0,1]
  5. Output: point on curve, C(u)
  6. Working: point array Q[0:n]
  7.  
  8. for i := 0 to n do
  9.  
  10. Q[i] := P[i]; // save input
  11.  
  12. for k := 1 to n do
  13.  
  14. for i := 0 to n - k do
  15. Q[i] := (1 - u)Q[i] + u Q[i + 1];
  16.  
  17. return Q[0];
  18. */
  19. function multiplication(pt, escalar) {
  20. let mult_x = pt.getX()* escalar;
  21. let mult_y = pt.getY()* escalar;
  22. return new Ponto(mult_x, mult_y);
  23. }
  24.  
  25. function addition (pt1, pt2) {
  26. let add_x = pt1.getX() + pt2.getX();
  27. let add_y = pt1.getY() + pt2.getY();
  28. return new Ponto(add_x, add_y);
  29. }
  30.  
  31. // recebe a quantidade de pontos de avaliação
  32. // e o array de pontos de controle
  33. function gerarCurva(avaliacao, pt) {
  34. let pontos_curva = [];
  35. let u = 1/avaliacao;
  36. for(let i = 0; i < 1; i = i + u) {
  37. pontos_curva.push(deCasteljau(pt, i));
  38. }
  39. return pontos_curva;
  40. }
  41.  
  42. function deCasteljau(pt, u) {
  43. let q = [];
  44.  
  45. for(let i = 0; i <= pt.length -1; i++) { // deixamos length -1 pois como pegamos i+1 sairiamos do escopo do array
  46. q[i] = pt[i];
  47. }
  48.  
  49. for(let k = 1; k <= pt.length -1; k++) {
  50. for(let i = 0; i <= pt.length -1 -k; i++) {
  51. let p1 = multiplication(q[i], 1-u);
  52. let p2 = multiplication(q[i+1], u);
  53. q[i] = addition(p1,p2);
  54. }
  55. }
  56. return q[0];
  57. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement