objective-c – 沿弧线变换路径

objective-c – 沿弧线变换路径,第1张

概述我试图沿弧线变换路径. 我的项目在osX 10.8.2上运行,绘画是通过CALayers中的CoreAnimation完成的. 我的项目中有一个波形将由路径绘制.大约有200个样本点镜像到底部.这些被涂成每秒60次并更新为歌曲位置. 请忽略白线,它只是一个旋转指示器. 我想要实现的是沿弧形绘制波形. “向上”应该指向中间.它不需要一路走来.波形应沿绿色圆圈绘制.请查看下面提供的草图. 我不知道如何 我试图沿弧线变换路径.

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

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

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

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

我不知道如何以高效的方式实现这一目标.每秒有许多点需要坐标校正.

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

1)有可能为路径添加线性变换,我认为这对我没有帮助.我唯一能想到的是添加一个点,用转换旋转路径,添加另一个点,旋转等等.但我认为这将是非常缓慢的

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

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

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

解决方法 恕我直言,最有效的方法(就cpu使用而言)将使用某种形式的预先计算的方法,该方法将考虑显示器的分辨率.

巧妙地预先计算的值

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

>无需执行扩展的数学计算
>无需渲染两个彼此距离太近的点

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

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

使用多核渲染

>您可以使用多个核心计算曲线的不同区域(可能很棘手)>或者您可以使用多个核心进行预计算,并使用一个核心来完成工作.

总结

以上是内存溢出为你收集整理的objective-c – 沿弧线变换路径全部内容,希望文章能够帮你解决objective-c – 沿弧线变换路径所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1007330.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存