SVG Линейная Градиентная шкала и вопрос о переводе
-
12-09-2019 - |
Вопрос
У меня есть следующий радиальный градиент:
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient2454"
id="radialGradient2460"
cx="4022.8572"
cy="5451.2656"
fx="4022.8572"
fy="5451.2656"
r="3559.865"
gradientTransform="matrix(-0.1071067,-0.1166362,0.1377765,-7.0459663e-2,276.61943,1452.439)"
gradientUnits="userSpaceOnUse" />
Я бы хотел уменьшить размер этого градиента на 90% и соответствующим образом преобразовать его на основе этого нового масштаба (позиция x становится 402,2, позиция y становится 545,1 и т.д.).
Очевидно, что умножение cx, cy, fx, fy и r на .1 поможет мне пройти часть пути к этому.Однако, как мне программно переработать gradientTransform, чтобы пройти оставшуюся часть пути?
Решение
Я бы оставил параметры (cx, fx, r и т.д.) нетронутыми.Просто умножьте существующую матрицу преобразования на новую матрицу для масштабирования.Результирующая матрица - это новая матрица преобразования для вашего градиента.
Если вы хотите масштабировать по центру, то вам также необходимо добавить перевод в матрицу масштабирования.
Таким образом, это было бы для коэффициента масштабирования s = 0.1:
newGradientTansform =
oldGradienTransform * matrix(s, 0, 0, s, -cx*(s-1), -cy*(s-1))