Найти высоту кривой Безье на холсте - PullRequest
4 голосов
/ 08 декабря 2010

Я пытаюсь создать простую закругленную вершину в прямоугольник. Я смог использовать метод bezierCurveTo, чтобы создать ограничение, но мне пришлось поиграться со значениями y контрольной точки, чтобы получить правильную высоту кривой. Если у меня есть ширина, и я знаю высоту, через которую должна пройти кривая, это их формула для определения значений y контрольной точки? у меня сейчас есть функция

c.moveTo(130,55);
c.bezierCurveTo(130,-18,0,-18,0,55);

-18 - это то, что я должен был установить для значений y, чтобы кривая приблизительно проходила через y = 0.

1 Ответ

5 голосов
/ 16 марта 2011

Да, есть простой ответ для этой ограниченной версии кривых Безье. Если взять определение кубической кривой Безье из википедии здесь и решить для средней точки вдоль кривой (t = 0,5), минимальное значение у будет равно:

1/4 Ymax + 3/4 Ymin

(Ymax - значение y начальной и конечной точек, а Ymin - значение y двух контрольных точек). Или, если средняя точка равна 0,

Ymin = -1/3 Ymax.

Так, так как у вас Ymax = 55, Ymin должен быть -1 / 3 * 55 = -18,333 .. - поэтому 18 работало в вашем примере.

...