SVG-如何将渐变变换矩阵应用于线性渐变笔刷? 我用C++语言写了一个SVG查看器应用程序。事实上,我在几个SVG文件中遇到了一个无法理解的转换问题
考虑以下SVG文件:SVG-如何将渐变变换矩阵应用于线性渐变笔刷? 我用C++语言写了一个SVG查看器应用程序。事实上,我在几个SVG文件中遇到了一个无法理解的转换问题,svg,matrix,gradient,transformation,linear-gradients,Svg,Matrix,Gradient,Transformation,Linear Gradients,考虑以下SVG文件: 这基本上是一个用渐变笔刷填充的矩形,从橙色到洋红。应用所有变换后,矩形大小为90x145,位于坐标[0,0]处 如果我很好地理解了原理,为了正确绘制矩形,我应该执行以下步骤: 计算本地文档坐标系中由x1、y1、x2和y2值给出的渐变笔刷边界框。这应该通过将给定的梯度变换矩阵应用于从x1、y1、x2和y2计算出的点来实现 由于渐变单位被声明为“用户使用空间”,因此根据线性渐变标记值和变换的边界框计算笔刷 转换要填充的矩形坐标,并将其放入文档坐标系中 使用先前创建的画笔,在
这基本上是一个用渐变笔刷填充的矩形,从橙色到洋红。应用所有变换后,矩形大小为90x145,位于坐标[0,0]处
如果我很好地理解了原理,为了正确绘制矩形,我应该执行以下步骤:
<line x1="74.658" y1="-398.92" x2="75.519" y2="-485.7" />
(由于变换不引入倾斜,因此渐变法线仍然垂直于该线。)
此时,渐变将应用于局部坐标系中的矩形
请注意,如果转换已直接应用于rect,而不是封闭组,则这甚至是正确的。将变换应用于元素始终是要执行的最后一个操作
我认为,您出错的地方是将userSpaceOnUse
解释为对矩形应用变换后的最终坐标系。但它是什么呢
在引用渐变元素时就位
因此,在进一步变换之前。首先,我认为使用术语“边界框”作为渐变是没有帮助的。四个值x1、x2、y1、y2描述了一个向量,梯度停止点匹配到该向量上,并且梯度法线垂直于该向量(在应用任何变换之前)。“长方体”与渐变特性没有任何意义的关系
梯度向量可以可视化为线元素
<line x1="74.658" y1="-398.92" x2="75.519" y2="-485.7" />
(由于变换不引入倾斜,因此渐变法线仍然垂直于该线。)
此时,渐变将应用于局部坐标系中的矩形
请注意,如果转换已直接应用于rect,而不是封闭组,则这甚至是正确的。将变换应用于元素始终是要执行的最后一个操作
我认为,您出错的地方是将userSpaceOnUse
解释为对矩形应用变换后的最终坐标系。但它是什么呢
在引用渐变元素时就位
因此,在进一步转换之前。感谢您提供的详细答案,它帮助我找到了错误所在。如何使用Matrix4(c++语言)将计算线信息(与渐变相关)添加到矩形?感谢您提供的详细答案,它帮助我找到了错误所在。如何添加计算线信息是否使用Matrix4(c++语言)将(与渐变相关)添加到矩形?
<rect width="145" height="90" x="7.631" y="139.36"/>
<line x1="76.6302" y1="235.055" x2="77.4972" y2="131.787" />
<rect width="145" height="90" x="7.631" y="139.36"/>
<line x1="70" y1="95.7" x2="69.87" y2="-7.57" />