Вопрос

У меня есть следующий радиальный градиент:

<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))
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top