2009-07-09 10 views
2

私は、次の放射状の勾配を有する:SVGリニアグラデーションスケールと翻訳質問

<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" /> 

私はx位置になる(90%によってサイズでこの勾配を削減し、この新しいスケールに基づいて適切にそれを翻訳したいのですが402.2、y位置は545.1になります)。

明らかに、cx、cy、fx、fy、およびrに.1を掛け合わせると、そこに途中で入ることになります。しかし、残りの部分を得るために、グラデーショントランスフォームをプログラム的に再加工するにはどうすればよいですか?

+0

"(x位置は402になり、yの位置は5451となり、" あなたは右、タイプミス –

+0

はい...タイプミスThxを:)?。。 – jsight

答えて

2

パラメータ(cx、fx、rなど)は変更しません。既存の変換行列にスケーリングのための新しい行列を掛けるだけです。結果の行列は、グラデーションの新しい変換行列です。

センターを基準にしてスケーリングしたい場合は、スケーリングマトリックスにも翻訳を追加します。

だから、これは係数S = 0.1をスケーリングするために、次のようになります。

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