рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ: рдмреЗрдЬрд╝рд┐рдпрд░ рдХрд░реНрд╡реНрд╕ рдХреЗ рд╕рд╛рде рдбреНрд░рд╛

рд╢реБрдн рджрд┐рди, рд╣реНрд░рдЬрд╝рд┐рддрд▓реА!
рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд╛рд░реЛрдХ рддрддреНрд╡ рдкрд╕рдВрдж рд╣реИрдВред рдПрдХ рдмрд╛рд░ рдлрд┐рд░, рд╕рд╛рдЗрдЯреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдкрд░ рдЗрд╕реА рддрд░рд╣ рдХреЗ рдкреИрдЯрд░реНрди рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдХрд▓реНрдкрдирд╛ рдХреА рдХрд┐ рдПрдиреАрдореЗрд╢рди рдореЗрдВ рдпрд╣ рдХрд┐рддрдирд╛ рдЕрджреНрднреБрдд рд▓рдЧреЗрдЧрд╛, рддрд╕реНрд╡реАрд░ рдЬреАрд╡рди рдореЗрдВ рдЖ рдЬрд╛рдПрдЧреАред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ HTML5 рдХреЗ рдЖрдЧрдорди рдХреЗ рд╕рд╛рде, рдкреБрдирд░реЛрджреНрдзрд╛рд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд▓реЗрдХрд┐рди рдмрд┐рдВрджреБрдУрдВ рдкрд░ рд╡рдХреНрд░ рдХреИрд╕реЗ рдЦреАрдВрдЪрдирд╛ рд╣реИ? рдлрд┐рд░, рд╡реИрд╕реЗ, рдореИрдВрдиреЗ рдмреЗрдЬрд┐рдпрд░ рд╡рдХреНрд░ рдХреЛ рдпрд╛рдж рдХрд┐рдпрд╛!

рд╡реЗрдХреНрдЯрд░ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдХреЗ рдкрд╛рдареЛрдВ рдореЗрдВ, рдореИрдВрдиреЗ рдмреЗрдЬрд╝рд┐рдпрд░ рдХрд░реНрд╡реНрд╕ рд╕реЗ рдЬрдордХрд░ рдирдлрд░рдд рдХреАред рдЙрд╕рдХреЗ рдХрд╛рдо рдХрд╛ рд╕рд┐рджреНрдзрд╛рдВрдд рдЬрд╛рджреБрдИ, рд╕рдордЭ рд╕реЗ рдмрд╛рд╣рд░ рдФрд░ рдХрдо рд╕реЗ рдХрдо рдЕрд╕рднреНрдп, рдЕрддрд╛рд░реНрдХрд┐рдХ рдХрд╣рд╛ рдЧрдпрд╛ рдерд╛ред рдПрдХ рдХреЛ рд▓рдЧ рд░рд╣рд╛ рдерд╛ рдХрд┐ рд╡рдХреНрд░ рдЦреБрдж рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рдХрд┐ рдХреИрд╕реЗ рдЪрдХрдорд╛ рджреЗрдирд╛ рд╣реИ, рдФрд░ рдПрдХ рдЕрднреЗрджреНрдп рдмрд┐рд▓реНрд▓реА рдХреИрд╕реЗ рдлреИрд▓ рдЧрдИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЙрд╕рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдерд╛, рдФрд░ рдореЗрд░реА рдЬрд╝рд░реВрд░рдд рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдирд╣реАрдВред

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рд╕рдордп рд╕рдорд░реНрдкрд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛ред рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рдФрд░ рдХрд╛рдлреА рд░реЛрдЪрдХ рдирд┐рдХрд▓рд╛ред рдкрд░рд┐рдгрд╛рдо рдХреИрдирд╡рд╛рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдШрдЯрддрд╛ рдХрд╛ рдПрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИред
рдХреМрди рдкрд░рд╡рд╛рд╣ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдШреБрдорд╛рд╡рджрд╛рд░ рдЬрд╛рдирд╡рд░ рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдХрдЯреМрддреА рдХреЗ рддрд╣рдд рдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИ!

рд╕рд┐рджреНрдзрд╛рдВрдд рдХреА рдмрд┐рдЯ


рдЖрдЗрдП рдирд┐рд░реНрдорд╛рдг рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВред рдмреЗрдЬрд┐рдпрд░ рд╡рдХреНрд░ рдХрдИ рд╕рдВрджрд░реНрдн рдмрд┐рдВрджреБрдУрдВ рдкрд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЖрдВрдХрд┐рдХ рд░реВрдк рд╕реЗ рдмреЛрд▓рдирд╛: рд╡рдХреНрд░ рд╢реВрдиреНрдп рд╕рдВрджрд░реНрдн рдмрд┐рдВрджреБ рдкрд░ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рдкрд╣рд▓реЗ рдХреА рдУрд░ рдмрдврд╝рдирд╛ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЪрд╛рдирдХ рджреВрд╕рд░рд╛ рдиреЛрдЯрд┐рд╕ рдХрд░рддрд╛ рд╣реИ - рдЗрд╕рдХреЗ рд▓рд┐рдП рдЧреБрд░реБрддреНрд╡рд╛рдХрд░реНрд╖рдг рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ, рдзреАрд░реЗ-рдзреАрд░реЗ рдЙрд╕рдХреА рджрд┐рд╢рд╛ рдореЗрдВ рдЕрдкрдирд╛ рдорд╛рд░реНрдЧ рдмрджрд▓рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдПрдХ рддрд┐рд╣рд╛рдИ, рдФрд░ рднреА рдЕрдзрд┐рдХ рдЖрдХрд░реНрд╖рдХ, рдХреНрд╖рд┐рддрд┐рдЬ рдкрд░ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ ... рдФрд░ рдЗрд╕рд▓рд┐рдП, рд╣рд░ рдХрд┐рд╕реА рджреНрд╡рд╛рд░рд╛ рдкрд╛рд░рд┐рдд рдмрд┐рдВрджреБ, рд╡рдХреНрд░ рдЕрдВрддрд┐рдо рд╕рдВрджрд░реНрдн рдмрд┐рдВрджреБ рдкрд░ рд░реБрдХрддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдпрд╣ рдЖрддрд╛ рд╣реИред рд░рд╛рд╕реНрддрд╛ рдПрдХ рд╢рд░рд╛рдмреА рдХреА рддрд░рд╣ рдирд┐рдХрд▓рддрд╛ рд╣реИ рдЬреЛ рд╕реБрдмрд╣ рдШрд░ рдЬрд╛ рд░рд╣рд╛ рд╣реЛрддрд╛ рд╣реИред
рдЫрд╡рд┐

рдЪрд▓рд┐рдП рдЧреАрдд рд╕реЗ рдХрдареЛрд░ рдЧрдгрд┐рдд рдХреА рдУрд░ рдмрдврд╝рддреЗ рд╣реИрдВред

рд╕рд┐рджреНрдзрд╛рдВрдд рдЕрд╣рдВрдХрд╛рд░ рд╕реЗ рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рд╕реЗ рдЙрдзрд╛рд░ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ :

рдмреЗрдЬрд┐рдпрд░ рд╡рдХреНрд░ рдмрд░реНрдирд╕реНрдЯреАрди рдмрд╣реБрдкрдж рдХрд╛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓рд╛ рд╣реИ, рдПрдХ рдкреИрд░рд╛рдореАрдЯреНрд░рд┐рдХ рд╡рдХреНрд░ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рджреНрд╡рд╛рд░рд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

рдЫрд╡рд┐ рдЬрд╣рд╛рдБ

n рд╕рдВрджрд░реНрдн рдмрд┐рдВрджреБрдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣реИ;
i - рд╕рдВрджрд░реНрдн рдмрд┐рдВрджреБ рд╕рдВрдЦреНрдпрд╛;
t рд╡рд╣ рдЪрд░рдг рд╣реИ рдЬрд┐рд╕ рдкрд░ рд╣рдо рд╡рдХреНрд░ рдХреА рд╕реНрдерд┐рддрд┐ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрдм 100 рдмрд┐рдВрджреБрдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╡рдХреНрд░ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдХрджрдо 0.01 рд╣реЛрдЧрд╛ (рд╕рдВрджрд░реНрдн рдмрд┐рдВрджреБ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рд╡рдХреНрд░ рдкрд░ рд╣реА рдмрд┐рдВрджреБ);
рдкреА - рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕рдВрджрд░реНрдн рдмрд┐рдВрджреБ рдХрд╛ рд╕рдордиреНрд╡рдп;
b (t) рдмреЗрдЬрд╝рд┐рдпрд░ рд╡рдХреНрд░ рдХрд╛ рдЖрдзрд╛рд░ рдХрд╛рд░реНрдп рд╣реИред рдпрд╣ рдЧреБрдгрд╛рдВрдХ рд╕рдВрджрд░реНрдн рдмрд┐рдВрджреБ рдХреЗ рд╡рдЬрди рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд░реНрдирд╕реНрдЯреАрди рдмрд╣реБрдкрдж рд╣реИ:

рдЫрд╡рд┐

рдЬрд╣рд╛рдБ рдЫрд╡рд┐ N рдХреЗ рд╕рдВрдпреЛрдЬрди рдХреА рд╕рдВрдЦреНрдпрд╛ i рд╣реИ , рдЬрд╣рд╛рдВ n рдмрд╣реБрдкрдж рдХреА рдбрд┐рдЧреНрд░реА рд╣реИ, рдореИрдВ рд╕рдорд░реНрдерди рд╢реАрд░реНрд╖ рдХреА рдХреНрд░рдо рд╕рдВрдЦреНрдпрд╛ рд╣реИред

рдкрд╣рд▓реЗ рдФрд░ рдЖрдЦрд┐рд░реА рдЪрд░рдгреЛрдВ рдореЗрдВ, рдмрд░реНрдирд╕реНрдЯреАрди рдмрд╣реБрдкрдж рдХрд╛ рдореВрд▓реНрдп 1 рд╣реИ, рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдпрд╣рд╛рдБ рд╣реИ ред рдордзреНрдп рдмрд┐рдВрджреБ рдХрд╛ рд╡рдХреНрд░ рдХреЗ рдордзреНрдп рдореЗрдВ рд╕рдмрд╕реЗ рдмрдбрд╝рд╛ рдкреНрд░рднрд╛рд╡ рд╣реИ, рдкрд╣рд▓реЗ рддреАрд╕рд░реЗ рдореЗрдВ, рдкрд╣рд▓реЗ рддреАрд╕рд░реЗ рдХрд╛ рд╕рдорд░реНрдерди рдмрд┐рдВрджреБ, рдФрд░ рдЗрд╕реА рддрд░рд╣ред рдмрд░реНрдирд╕реНрдЯреАрди рдмрд╣реБрдкрдж 0 рд╕реЗ 1 рддрдХ рдорд╛рди рд▓реЗрддрд╛ рд╣реИред

рдФрд░ рдЗрд╕рд▓рд┐рдП, рдмреЗрдЬрд┐рдпрд░ рд╡рдХреНрд░ рдХреЗ рд╕рдордиреНрд╡рдп рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
  1. рд╕рдВрджрд░реНрдн рдмрд┐рдВрджреБ рдХреЗ рд╡рдЬрди рдХреА рдЧрдгрдирд╛ рдХрд░реЗрдВ;
  2. рдЗрд╕ рд╕рдВрджрд░реНрдн рдмрд┐рдВрджреБ рдХреЗ рд╕рдордиреНрд╡рдп рд╕реЗ рд╡рдЬрди рдХреЛ рдЧреБрдгрд╛ рдХрд░реЗрдВ;
  3. рд╕рднреА рдирд┐рдпрдВрддреНрд░рдг рдмрд┐рдВрджреБрдУрдВ рдХреЗ рд▓рд┐рдП рдЪрд░рдг 1-2 рджреЛрд╣рд░рд╛рдПрдВ;
  4. рдкрд░рд┐рдгрд╛рдореА рдореВрд▓реНрдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝реЗрдВ - рдпрд╣ рд╡рдХреНрд░ рдХрд╛ рд╕рдордиреНрд╡рдп рд╣реЛрдЧрд╛ред


рд╣рдо рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЛ рд╕реБрд▓рдЭрд╛рддреЗ рд╣реИрдВ, рдЕрднреНрдпрд╛рд╕ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВред

рд╣реБрд░реНрд░реЗ! рдЕрднреНрдпрд╛рд╕ред



рд╣рдо рдореВрд▓ рдХрд╛рд░реНрдп рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ:

// i -  , n -  , t -   ( 0  1) function getBezierBasis(i, n, t) { //  function f(n) { return (n <= 1) ? 1 : n * f(n - 1); }; //  i-    return (f(n)/(f(i)*f(n - i)))* Math.pow(t, i)*Math.pow(1 - t, n - i); } 


рдЖрдЧреЗ рд╣рдореЗрдВ рд╡рдХреНрд░ рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдорд┐рд▓рддреЗ рд╣реИрдВред
рдЖрдк рддреАрди-рдЖрдпрд╛рдореА, рдЪрд╛рд░-рдЖрдпрд╛рдореА рд╕реНрдерд╛рди, рдФрд░ рдЗрд╕реА рддрд░рд╣ рдПрдХ рдмреЗрдЬрд┐рдпрд░ рд╡рдХреНрд░ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдо рд╡рд┐рдорд╛рди рдкрд░ рд░реЛрдХ рджреЗрдВрдЧреЗред

 // arr -   .  -  , (x = arr[0], y = arr[1]) // step -     (0 < step < 1),   0.01 function getBezierCurve(arr, step) { if (step == undefined) { step = 0.01; } var res = new Array() for (var t = 0; t < 1 + step; t += step) { if (t > 1) { t = 1; } var ind = res.length; res[ind] = new Array(0, 0); for (var i = 0; i < arr.length; i++) { var b = getBezierBasis(i, arr.length - 1, t); res[ind][0] += arr[i][0] * b; res[ind][1] += arr[i][1] * b; } } return res; } 


рд╣рдо рдПрдХ рд╡рдХреНрд░ рдмрдирд╛рддреЗ рд╣реИрдВ:

 // ctx - rendering context , arr -       // delay -     , pause -    , function drawLines(ctx, arr, delay, pause) { if (delay == undefined) { delay = 10; } if (pause == undefined) { pause = delay; } var i = 0; function delayDraw() { if (i >= arr.length - 1) { return; } ctx.moveTo(arr[i][0],arr[i][1]); ctx.lineTo(arr[i+1][0],arr[i+1][1]); ctx.stroke(); ++i; setTimeout(delayDraw, delay); } setTimeout(delayDraw, pause); } 


рдпрд╣ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИ:

 drawC = document.getElementById('bezier'); drawC.width = document.width - 30; drawC.height = document.height - 30; if (drawC && drawC.getContext) { ctx = drawC.getContext('2d'); ctx.fillStyle="#33CC99"; ctx.lineWidth=0.1; var flow; //    var arr = new Array(); arr[0] = new Array(0, 100); arr[1] = new Array(100, 80); arr[2] = new Array(150, 150); arr[3] = new Array(200, 155); flow = getBezierCurve(new Array(arr[0], arr[1], arr[2], arr[3]), 0.01); drawLines(ctx, flow, 10); } 


Jsfiddle рдЙрджрд╛рд╣рд░рдг

рд╕рдВрдмрдВрдзрд┐рдд рд▓рд┐рдВрдХ:
Javascript.ru рдкрд░ рдЕрдиреБрдЪреНрдЫреЗрдж

рдЕрдкрдбреЗрдЯ: рдПрдЪрдЯреАрдПрдордПрд▓ 5 рдорд╛рдирдХ рддреАрди рдФрд░ рдЪрд╛рд░ рдмрд┐рдВрджреБрдУрдВ рдкрд░ рдХреНрд░рдорд╢рдГ рдмреЗрдЬрд╝рд┐рдпрд░ рдХрд░реНрд╡реНрд╕ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдХреНрд╡рд╛рдбреНрд░реИрдЯрд┐рдХ рдХрд░реНрд╡рдЯреЛ рдФрд░ рдмреЗрдЬрд╝рд┐рдпрд░ рдХрд░реНрд╡рдЯреЛ рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдзрдиреНрдпрд╡рд╛рдж lany

Source: https://habr.com/ru/post/In163073/


All Articles