CSS3中的极坐标变换?

时间:2012-04-14 11:20:34

标签: css css3 css-transforms

将一条线转换为一个环是图形程序中的一项简单任务,例如GIMP:

Filter ⇒ Distorts ⇒ Polar Coordinates http://adamhaskell.net/img/transform.png

我正在尝试研究是否可以在CSS中产生相同的效果。

所以我解决了以下问题:

  • 上述算法将x映射到r,将y映射到θ
  • 要执行此操作,x会缩放到[0,w/2]的范围,w是图片的宽度
  • 此外,y缩放到[0,2π]
  • 的范围
  • 将极坐标转换回笛卡儿:xc = rp*cos(θp)yc = rp*sin(θp)
  • 然后翻译结果,使原点位于图像的中心。
  • 所以我们有:

x' = (x/2)*cos(y/h*2π) + w/2;  
y' = (x/2)*sin(y/h*2π) + h/2;

这一切都很好,但我怎么能在CSS中产生这样的变换呢?据推测,没有一个关键字是有用的,所以它必须是矩阵变换。好吧,我不知道如何从上面的两个方程构建矩阵,更不用说如何在CSS变换中表示它。

最后一步有人可以帮助我吗?

2 个答案:

答案 0 :(得分:5)

我从未使用CSS转换矩阵,但我认为你想要的是不可能。 使用变换矩阵,您可以执行线性变换。线性变换总是将直线映射到直线或0. Take a look at Wikipedia for more information

因此,使用矩阵将直线映射到圆是不可能的。

答案 1 :(得分:-2)

至少可以制作2个对称的三阶贝塞尔曲线 使用

Y(t)=(t ^ 3,t ^ 2,t,1)* M *(P0,P1,P2,P3)

时间

P0 - P3控制点坐标。这个向量必须是垂直的。我不知道如何在这个编辑器中制作垂直向量。

Y(t) - 曲线坐标

M - 4 * 4矩阵行1(-1,3,-3,1)行2(3,-6,-3,0)行3(-3,3,0,0)行4( 1,0,0,0)

现在您只需要一个从线坐标定义控制点的函数。