2012-07-04 2 views
3

У меня есть путь Безье, который хранится как массив из нескольких точек, каждый из которых представляет собой массив координат в форме [cp1x, cp1y, cp2x, cp2y, x, y].Как масштабировать кривую Безье (используя холст HTML5)?

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

Кто-нибудь знает, как достичь этого?

+0

Когда вы масштабируете, какая часть кривой останется фиксированной на месте, один из концов или центра? – SpacedMonkey

+0

У меня не было ничего конкретного, но я бы взял центр. – Thomas

ответ

0

В стандартном представлении точки P представляют фактические точки в пространстве, поэтому вы перемещаете их, как и любые другие точки. То есть масштабировать их, просто умножить все на вас коэффициент масштабирования: скажем, это a, так что это будет [a*cp1x,a*cp1y,a*cp2x,a*cp2y,a*x,a*y], или если вы хотите масштабировать x и y отдельно, вы можете использовать различные факторы для компонентови y.

Обратите внимание, что это будет масштабировать вещи относительно начала координат (x=0, y=0), поэтому, если у вас нет кривых в начале координат, это может выглядеть как сдвиг. Если вы хотите отрицать эффект этого сдвига, вы можете вычесть Px и Py из значений x и y соответственно, где Px и Py - это точка, которую вы хотите не перемещать при масштабировании, прежде чем выполнять масштабирование (а затем добавить его обратно после вас несколько, если вы хотите). Но если то, что вы хотите сделать, это масштабировать весь холст, например, от 5x5 дюймов до 7x7, вы хотите сделать умножение без каких-либо изменений (и в этом случае - на 7./5).

+0

удивительный. Благодарю. – Thomas

+0

Могу ли я спросить, может ли eq масштабировать кривую Безье не в начале координат: с moveTo origin x = 5, y = 6 Пусть функция f (a, cpX, x) = (a * (x-cpXx)) + x поэтому [с фиктивными значениями] [f (a, 1, 5), f (a, 4, 6), f (a, 8, 5), f (a, 10, 6), f (a , 14, 5), f (a, 14, 6)] Я пытаюсь получить серию кривых, нарисованных на контексте, который сам масштабируется до размера экрана. Когда контекст перекрашивается, я хотел бы, чтобы кривые масштабировались на месте в процентах (var a в данном случае) области экрана. Объекты масштабирования с этим форматом, но они немного перемещаются. –

+0

Я на самом деле имел в виду: f (a, cpX, x) = (a * (x-cpX)) + x (вынул дополнительный x из cpX). Переполнение стека не позволит мне редактировать свой комментарий. –

Смежные вопросы