我试图沿弧线变换路径.
我的项目在osX 10.8.2上运行,绘画是通过CALayers中的CoreAnimation完成的.
我的项目中有一个波形将由路径绘制.大约有200个样本点镜像到底部.这些被涂成每秒60次并更新为歌曲位置.
请忽略白线,它只是一个旋转指示器.
我想要实现的是沿弧形绘制波形. “向上”应该指向中间.它不需要一路走来.波形应沿绿色圆圈绘制.请查看下面提供的草图.
我不知道如何以高效的方式实现这一目标.每秒有许多点需要坐标校正.
我试着提出一些自己的想法:
1)有可能为路径添加线性变换,我认为这对我没有帮助.我唯一能想到的是添加一个点,用转换旋转路径,添加另一个点,旋转等等.但我认为这将是非常缓慢的
2)将路径绘制成图像并弯曲它肯定会导致图像伪影.
3)也许最好的想法是预先计算弧上的采样点,然后将向量保存到中心.取波形的y坐标,将它们放在采样点上,然后沿矢量移动到中心.
但也许我只是没有看到这个问题的某种简单解决方案.非常感谢帮助,非常欢迎新鲜的想法.先感谢您!
最佳答案 恕我直言,最有效的方法(就CPU使用而言)将使用某种形式的预先计算的方法,该方法将考虑显示器的分辨率.
巧妙地预先计算的值
我会进行数学转换(从线性到极地)并结合两个事实:
>无需执行扩展的数学计算
>无需渲染两个彼此距离太近的点
我没有现成的算法,但您可以使用预先计算的sin或cos表,并将数据范围与显示大小匹配,以便使用整数.
例如,假设我们有一些范围从0到1E6的数据,我们需要在100像素高度矩形中显示每个点的sin值.我们可以使用预先计算的sin表并使用整数.这样显示点的sin值会快得多.可以改进这个概念以获得更好的结果.
此外,有一些方法只保留曲线的重要点,以便显示的曲线实际上看起来像原始曲线(参见维基百科上的Ramer-Douglas-Peucker算法).但我发现快速显示不断变化的数据效率低下.
使用多核渲染
>您可以使用多个核心计算曲线的不同区域(可能很棘手)
>或者您可以使用多个核心进行预计算,并使用一个核心来完成工作.