4

我试图沿着弧线变换路径。

我的项目在 osX 10.8.2 上运行,绘画是通过 CALayers 中的 CoreAnimation 完成的。

我的项目中有一个波形,它将由路径绘制。大约有 200 个采样点镜像到底部。这些每秒绘制 60 次并更新为歌曲位置。

请忽略白线,它只是一个旋转指示器。

情况

我想要实现的是沿着弧线绘制波形。“上”应该指向中间。它不需要一路走来。波形应沿绿色圆圈绘制。请看下面提供的草图。

我想达到什么

我不确定如何以高效的方式实现这一目标。每秒有很多点需要坐标校正。

我试着想出一些我自己的想法:

1)有可能为路径添加线性变换,我认为这对我没有帮助。我唯一能想到的就是添加一个点,通过变换旋转路径,添加另一个点,旋转等等。但我认为这会很慢

2)将路径绘制成图像并弯曲它肯定会导致图像伪影。

3)也许最好的想法是预先计算弧上的样本点,然后将向量保存到中心。获取波形的 y 坐标,将它们放在样本点上,然后将它们沿矢量移动到中心。

但也许我只是没有看到某种简单的解决方案来解决这个问题。非常感谢您的帮助,非常欢迎新的想法。先感谢您!

4

1 回答 1

2

恕我直言,最有效的方法(就 CPU 使用而言)是使用某种形式的预先计算的方法,该方法会考虑到显示器的分辨率。

巧妙的预计算值

我会进行数学转换(从线性到极坐标)并结合两个事实:

  1. 无需进行广泛的数学计算
  2. 无需渲染距离太近的两个点

我没有现成的算法供您使用,但您可以使用预先计算的 sin 或 cos 表,并将数据范围与显示大小相匹配,以便使用整数。

例如,假设我们有一些从 0 到 1E6 的数据,我们需要在 100 像素高度的矩形中显示每个点的 sin 值。我们可以使用预先计算的 sin 表并使用整数。这样显示一个点的 sin 值会快得多。这个概念可以被细化以获得更好的结果。此外,还有一些方法可以只保留曲线的重要点,以便显示的曲线实际上看起来像原始曲线(请参阅维基百科上的Ramer-Douglas-Peucker 算法)。但我发现快速显示不断变化的数据效率低下。

使用多核渲染

  1. 您可以使用多个核心计算曲线的不同区域(可能很棘手)
  2. 或者您可以使用多个核心进行预计算,并使用一个核心来完成这项工作。
于 2013-01-05T01:29:08.833 回答