13

在 GIMP 等图形程序中,将一条线变成一个环是一项简单的任务:

过滤器⇒扭曲⇒极坐标
(来源:adamhaskell.net

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

所以我制定了以下内容:

  • 上述算法映射xryθ
  • 为此,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 变换中表示它了。

谁能帮我完成这最后一步?

4

2 回答 2

5

我从来没有使用过 CSS 变换矩阵,但我认为你想要的是不可能的。使用变换矩阵,您可以进行线性变换。线性变换总是将直线映射到直线或 0。查看 Wikipedia 了解更多信息

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

于 2012-04-14T12:04:57.330 回答
-2

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

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

t - 时间

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)

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

于 2012-04-14T12:26:02.407 回答