ยซ !ยป, โ . ยซ 2 !ยป, โ . ยซ โ , !ยป, โ . , , . - - NPM. โ , , - . โ 2D .
, JS, , , , , , - . , path SVG-, - , , , , . , JS. .
, , 2D . , โ , , .
, , . HTML CSS . , X Y, โ . โ , . , , WebGL. , . .
, โ . โ - - . - โ - . โ . . . . .
, ? . . , . , , . , . . , , ? , , , , . , โ , , , . โ HTML-, - SVG-, - โ .
I. y = f(x)
. , , , , , ... , โ .
:
(x) => {
return Math.sin(x);
}
- JS.
, X Y, Y X. X 0 10 (), Y -, -, -โฆ - โ , . requestAnimationFrame x, y, - . , , X, Y โ .
โ , , . - , , - . , , .
:
(x) => {
return 2 * Math.sin(x);
}
(x) => {
return 0.5 * Math.sin(5 * x);
}
.
(x ) - , X. โ Y. .
, , :
(x) => {
return Math.sin(x) + 1;
}
(x) => {
return Math.sin(x + 1);
}
?
. x โ X, โ Y. , .
, .
. , , .
, ? !
(x) => {
return Math.sin(x) + 0.2 * Math.sin(5 * x);
}
- :
- , , . , . .
. . . . :
(x) => {
return 2 * Math.cos(3 * x) / Math.pow(x + 1, 2);
}
, bounce ( ). , , CSS-, - JS .
, , . . , .
.
, , , :
- y = f(x) .
- .
- .
II.
- - , โ - -, . , . , - (X, Y), () () . .
(X, Y) (R, ฯ) , :
const x = r * Math.cos(p);
const y = r * Math.sin(p);
p ฯ, unicode-.
, ยซ 5 -, ยป ยซ GPS- ยป.
, โ , .
:
(p) => {
return p / 5;
}
, ( ), . , , , . , , . , , , , . .
โ . , Y X, , .
. ? . ? , - , , . . .
, , , .
(p) => {
return Math.sin(5 * p);
}
(p) => {
return 2 * Math.sin(5 * p + 1);
}
! , ?
. , .
, -. ( ) , โ .
, , .
:
(p) => {
return Math.sin(p) + 0.2 * Math.sin(2 * p);
}
(p) => {
return 2 * Math.sin(p) + 0.2 * Math.sin(10 * p);
}
(p) => {
return Math.sin(3 * p - Math.PI / 2) * Math.sin(4 * p);
}
! , .
:
(p) => {
return (Math.sin(p) + Math.sin(p * 2) + 2) / 4;
}
(p) => {
return (Math.sin(p) + Math.sin(p * 3) + 2) / 2;
}
(p) => {
return Math.sin(p) + Math.sin(p * 4) + 2;
}
, , , , - . .
:
- .
- , , , .
III.
y = f(x). x - . :
x = f1(t)
y = f2(t)
. , , . , - - . x y. , โ . .
. , , . โ , โ . .
, :
x = t
y = f(t)
, , :
x: (t) => {
return t;
},
y: (t) => {
return (t / 2) - 1;
}
- :
, .. t , x , .
, , :
.
, , ? - . . (X, Y) , , . , - :
x: (t) => {
return 5 * t / (t + 1);
},
y: (t) => {
return 2 * Math.abs(Math.cos(5 * t)) / (t*t + 1);
}
- :
, - . ? ?
, . , . , , - , - , . , , , . โ . :
โ , .
.
, . .
, , . :
x: (t) => {
return t;
},
y: (() => {
let y0 = 2; // Y
let v0 = 0; //
let localT = 0; //
let g = 10; //
let k = 0.8; //
return (t) => {
let y = y0 + v0 * localT - g * localT * localT / 2;
if (y <= 0) {
y = 0;
y0 = 0;
v0 = (-v0 + g * localT) * k;
localT = 0;
}
localT += 0.005;
return y;
};
})()
, .
โ . , , . 1.62, . ? , . , โ , . . , , , .
CodePen, - , , , ยซ , ยป, , , , , . !
, , .
, , . , , - . , โ . , , . - , , .
:
- . โ .
- ยซ X Yยป. .
- , , โ .
IV.
, , . CSS. , โ . .
, , , . .
. . . . . . , -- , .
. 4 , t ( โ ) โ . , . , , . CSS . SVG path. .
, , . โ . โ ( ). โ S, . โ , ...
, โ X Y t:
x: (t) => {
return ((1-t)*(1-t)*(1-t)*x0) + (3*(1-t)*(1-t)*t*x1) + (3*(1-t)*t*t*x2) + (t*t*t*x3);
},
y: (t) => {
return ((1-t)*(1-t)*(1-t)*y0) + (3*(1-t)*(1-t)*t*y1) + (3*(1-t)*t*t*y2) + (t*t*t*y3);
}
(x0, y0) โ , (x1, y1) โ ... , , .
, (0, 0), , , (1, 1). , , , .
, t 0 1 , , CSS. .
, ? โ x, ?
, . (0, 0) (1, 1). . , , :
, , , , โ . , , . .
, . , , . ( t ) . , , . , , . ยซยป , โ . , , .
.
- . ?
โฆ , . .
. , ... , , , . SVG , path . , , , , .
, . , 0 1 ( ). , , , .
: , . , , . , , , .
:
4 , . , , , .
, - , .
, , . , , , ( โ , โ )?
, , :
ยซยป , - -, โ , , . .
.
- โ , , .
- , .
, . , , , . , , . , , , , 2D .
: , , 3D .
UPD: At the request of the commenters, I posted scripts for generating illustrations in this style on GitHub .