3

所以我对 SVG 坐标系有点困惑。我正在做一个将 SVG 对象转换为多边形的项目(然后在 OpenGL 中显示)。我有所有的代码,包括矩形、圆、路径(使用曲线近似)等,并将它们转换为每个对象的一组点。到目前为止,这一切都很好。

我现在正处于实施转换的阶段。我已经编写了所有矩阵函数并准备就绪,但我对 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 移动到指定点而不移动对象,而在其他情况下它用于移动对象。

我对坐标系的理解完全有缺陷吗?

4

1 回答 1

5

我认为SVG 规范非常清楚地解释了坐标转换。每次转换都意味着将当前坐标与 3x3 矩阵相乘。transform您可以在属性中指定的最通用的转换是 custom matrix(...),而所有其他类型的转换(平移、旋转、缩放、倾斜)只是易于使用的快捷方式。最后,一切都以矩阵形式结束。

组合几个变换很简单,它只是意味着每个变换矩阵按顺序与其他变换矩阵相乘,跟踪所有变换意味着只记住从这个乘法得到的最终 3x3 矩阵,计算一个元素的最终坐标意味着只需将初始坐标的 3x1 矩阵与该 3x3 矩阵相乘。

所以,我的建议是只使用矩阵并忘记手动应用每个转换。

于 2012-06-26T15:49:34.927 回答