5

在过去的几天里,我一直对路径渲染感到困惑,但没有任何真正的解决方案。

通过路径渲染,我的意思是给定一组 x,y 数据点(在不同距离处)以在给定数据集点之间以规则间隔绘制一条固定长度的虚线(或在我的情况下为旋转四边形)以创建平滑路径.

如果您有 iPhone 的飞行控制,我正在尝试创建与该游戏中的路径渲染类似的效果。

这是我的问题。如果图形的宽度 + 间隙不能精确地设计为 2 个数据集点之间的距离,那么我就会留下重叠或欠重叠。我对此的唯一解决方案是

1) 将重叠/欠重叠点作为下一个数据设置点的终点,然后从那里绘制到下一个点。

2) 始终在最终端点下绘制,并从下一个数据点重新开始。

这些解决方案都不是理想的,并且都有问题。

有没有人有更好的解决方案?

任何帮助将非常感激。

以下屏幕说明了我要创建的内容:http ://www.firemint.com/flightcontrol/screenshots-peaceful.html

粗虚线。

更新:

嗨,我尝试通过曲线渲染,我计算了三次曲线(通过 4 个控制点)。然而,问题是插值之一。给定 0 和 1 我可以通过任何 2 点。但是我想逐步完成整个路径(多个控制点)。问题是一些控制点之间的距离会不同,因此以恒定的步进增量(比如 0.2)步进会产生不规则的结果。我意识到为了正确地通过整个路径,我需要计算整个曲线的长度......问题是我该怎么做?……还是有别的办法?

干杯丰富

4

4 回答 4

3

有一个名为“CGPathAddQuadCurveToPoint”的 CoreGraphics 函数用于绘制平滑路径。 GitHub 上有一个关于如何使用它的示例

于 2009-08-03T15:01:28.367 回答
1

您可能想看看Bezier 曲线Hermite 曲线 ,它们并不难计算,并且您会得到漂亮的柔和曲线。

于 2009-08-03T14:35:30.047 回答
1

您可能应该查看Bézier 曲线样条线算法。

于 2009-08-03T14:36:24.447 回答
0

您是否完全受限于固定大小的四边形?理想的解决方案是将最后一个四边形截断为正确的大小。

如果你受到限制,你可以做几件事。如果您正在绘制虚线,您可以改变虚线的距离,以确保您永远不会在端点上出现部分四边形。这可能会在视觉上分散注意力,因为距离会根据段的长度进行调整。

编辑:

啊,图片有帮助。我假设因为这是在 iPhone 上,所以你会得到一系列点,它们之间的画线会产生可接受的曲线。如果是这种情况,使用样条线/曲线图元可能是矫枉过正。我可能会简单地通过在距最后一个数据点给定距离的每个数据点上绘制四边形来接近绘制线。

该算法将类似于:

  1. 在第一个数据点上绘制四边形(适当旋转)
  2. 遍历点列表,直到距离最后一个点至少 X 距离
  3. 在当前点和最后访问的点之间移动,以找到放置下一个四边形的确切中心。
  4. 绘制四边形(适当旋转)
  5. 转到第 2 步
  6. 如果您有最后一个四边形的部分点,则将其正常绘制(这将比截断它提供更好的视觉效果)。

为了好玩,让两点之间的距离 D 小于两点之间的距离(这在 2D 情况下可能更简单,但我一般喜欢工作):

vector v = point2 - point1;
normalize(v);
v *= D;
finalPoint = point1 + v;
于 2009-08-03T14:24:25.750 回答