Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // ele recebe o array de pontos de controle e o
- /*
- Input: array P[0:n] of n+1 points and real number u in [0,1]
- Output: point on curve, C(u)
- Working: point array Q[0:n]
- for i := 0 to n do
- Q[i] := P[i]; // save input
- for k := 1 to n do
- for i := 0 to n - k do
- Q[i] := (1 - u)Q[i] + u Q[i + 1];
- return Q[0];
- */
- function multiplication(pt, escalar) {
- let mult_x = pt.getX()* escalar;
- let mult_y = pt.getY()* escalar;
- return new Ponto(mult_x, mult_y);
- }
- function addition (pt1, pt2) {
- let add_x = pt1.getX() + pt2.getX();
- let add_y = pt1.getY() + pt2.getY();
- return new Ponto(add_x, add_y);
- }
- // recebe a quantidade de pontos de avaliação
- // e o array de pontos de controle
- function gerarCurva(avaliacao, pt) {
- let pontos_curva = [];
- let u = 1/avaliacao;
- for(let i = 0; i < 1; i = i + u) {
- pontos_curva.push(deCasteljau(pt, i));
- }
- return pontos_curva;
- }
- function deCasteljau(pt, u) {
- let q = [];
- for(let i = 0; i <= pt.length -1; i++) { // deixamos length -1 pois como pegamos i+1 sairiamos do escopo do array
- q[i] = pt[i];
- }
- for(let k = 1; k <= pt.length -1; k++) {
- for(let i = 0; i <= pt.length -1 -k; i++) {
- let p1 = multiplication(q[i], 1-u);
- let p2 = multiplication(q[i+1], u);
- q[i] = addition(p1,p2);
- }
- }
- return q[0];
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement