Простой способ задать кривую - использовать кубик Безье.
function bez3(x0, y0, x1, y1, x2, y2, x3, y3, t)
{
var x01 = x0 + t*(x1 - x0);
var y01 = y0 + t*(y1 - y0);
var x12 = x1 + t*(x2 - x1);
var y12 = y1 + t*(y2 - y1);
var x23 = x2 + t*(x3 - x2);
var y23 = y2 + t*(y3 - y2);
var x012 = x01 + t*(x12 - x01);
var y012 = y01 + t*(y12 - y01);
var x123 = x12 + t*(x23 - x12);
var y123 = y12 + t*(y23 - y12);
return {x: x012 + t*(x123 - x012),
y: y012 + t*(y123 - y012)};
}
Кривая начинается с t=0, (x0, y0)
по касательной к (x1, y1)
и достигает t=1, (x3, y3)
по касательной с (x2, y2)
.
Для t=0
функция возвращает начальную точку (x0, y0)
, для t=1
функция возвращает конечную точку (x3, y3)
. Значения t
между 0 и 1 являются точками вдоль кривой (однако они плавно, но не одинаково разнесены). Вы можете считать t
параметром «времени» точки, движущейся вдоль кривой.
После по этой ссылке можно увидеть интерактивную версию, реализованную в javascript / canvas (в примере используются буквы A, B, C и D вместо 0, 1, 2 и 3 для обозначения различных точек ).