所以我对SVG坐标系有些困惑。我正在做一个将SVG对象转换为多边形(然后在OpenGL中显示)的项目。我拥有所有使用rect,圆,路径(带有曲线近似)等的代码,并将它们变成每个对象的一组点。到目前为止,一切都很好。
我现在处于实现转换的阶段。我已经编写了所有矩阵函数并且可以使用,但是我对translate(x,y)与任何以0,0为中心的操作(主要是旋转和缩放)之间的关系感到困惑。
假设我们有一个0,0的对象。rotate(45, 100, 100)等于translate(100, 100) rotate(45) translate(-100, -100),但是如果我将对象移动到100,100且旋转仍应用为0,0,是否意味着旋转中心实际上发生在相对于对象原始位置的-100,-100处?
我想我的问题是如何translate影响对象的坐标系?似乎在某些情况下,它用于将0,0移至指定点而不移动对象,而在其他情况下,其用于移动对象。
我对坐标系的理解完全有缺陷吗?
我认为SVG规范非常清楚地解释了坐标转换。每个转换都意味着将当前坐标乘以3x3矩阵。您可以在transform属性中指定的最通用的转换是custom matrix(...),而其他所有类型的转换(平移,旋转,缩放,倾斜)都易于使用。最后,一切都以矩阵的形式结束。
组合多个变换很简单,这意味着每个变换矩阵都按顺序与其他矩阵相乘,并且跟踪所有变换意味着仅记住从该乘法获得的最终3x3矩阵,并计算元素的最终坐标就意味着只需将初始坐标的3x1矩阵与3x3矩阵相乘即可。
因此,我的建议是只使用矩阵,而不必手动应用每个变换。