gpt4 book ai didi

objective-c - 沿圆弧变换路径

转载 作者:搜寻专家 更新时间:2023-10-30 19:46:20 27 4
gpt4 key购买 nike

我正在尝试沿弧形变换路径。

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

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

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

situation

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

what i want to achieve

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

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

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

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

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

但也许我只是没有看到解决此问题的某种简单方法。非常感谢帮助,非常欢迎新的想法。提前致谢!

最佳答案

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

巧妙地预先计算值

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

  1. 不需要进行大量的数学计算
  2. 不需要渲染距离太近的两个点

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

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

使用多核渲染

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

关于objective-c - 沿圆弧变换路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13934588/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com