【问题标题】:Polar transform in CSS3?CSS3中的极坐标变换?
【发布时间】:2019-08-19 11:30:12
【问题描述】:

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


(来源:adamhaskell.net

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

所以我想出了以下内容:

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

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

【问题讨论】:

  • +1 回答这个有趣的问题

标签: css css-transforms


【解决方案1】:

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

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

【讨论】:

  • 最佳答案。与其提出一些复杂的方法,只是一个简单的“你做不到,这就是为什么”就足够了。
【解决方案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)

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

【讨论】:

  • 这是关于线性变换和矩阵的帖子的答案。虽然乘以 t^3 不是线性变换。
  • 问题是关于在 CSS 中解决这个问题。您的帖子中没有提到 CSS。
猜你喜欢
  • 2022-01-19
  • 2013-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多