SVG gradient linéaire échelle et traduction Question
-
12-09-2019 - |
Question
I ai le gradient radial suivant:
<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" />
Je voudrais réduire ce gradient taille de 90% et de le traduire de façon appropriée basée sur cette nouvelle échelle (position x devient 402,2, la position y devient 545,1, etc).
De toute évidence, la multiplication cx, cy, fx, fy et r par .1 me faire une partie du chemin. Cependant, comment puis-je retravaille le programatically gradientTransform pour obtenir le reste du chemin?
La solution
Je laisserais les paramètres (cx, fx, r, etc) intacte. Il suffit de multiplier la matrice de transformation existante par une nouvelle matrice pour la mise à l'échelle. La matrice résultante est la nouvelle matrice de transformation pour votre gradient.
Si vous voulez à l'échelle autour du centre, vous avez également ajouter une traduction dans la matrice de mise à l'échelle.
Ce serait donc pour le facteur d'échelle s = 0,1:
newGradientTansform =
oldGradienTransform * matrix(s, 0, 0, s, -cx*(s-1), -cy*(s-1))