SVG Линейная градиентная шкала и вопрос перевода - PullRequest
2 голосов
/ 10 июля 2009

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

<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, чтобы получить остальную часть пути?

1 Ответ

2 голосов
/ 10 июля 2009

Я бы оставил параметры (cx, fx, r и т. Д.) Без изменений. Просто умножьте существующую матрицу преобразования на новую матрицу для масштабирования. Полученная матрица - это новая матрица преобразования для вашего градиента.

Если вы хотите масштабировать вокруг центра, вы также должны добавить перевод в матрицу масштабирования.

Так что это будет для коэффициента масштабирования s = 0,1:

newGradientTansform = 
oldGradienTransform * matrix(s, 0, 0, s, -cx*(s-1), -cy*(s-1))
...