绘制曲线适用于所有象限/查找Bézier曲线的动态控制点

时间:2014-05-15 09:20:22

标签: ios core-graphics uibezierpath bezier coordinate-transformation

shape

问题是如果有人按下角度abc,如图2所示。 1,然后曲线应如图1所示绘制。 2使用CoreGraphics。我尝试使用Bézier曲线,但不同象限的形状需要动态控制点,这非常复杂(我猜)。有人可以为此提出解决方案吗?

2 个答案:

答案 0 :(得分:0)

如果我理解正确,那么你需要知道的是,如何在不同的象限中找到合适的控制点。这个link将为您提供您想要的内容。如果您想绘制立方贝塞尔曲线,那么第18页就是为您准备的。但是我会建议你完全阅读它以更好地理解贝塞尔曲线。

本文中给出的公式将帮助您准确地绘制一个象限的椭圆弧。您可以使用角度定义象限。要使用本文找到控制点,您需要提供以下数据:

  • 开始和结束角度(将定义您的象限)
  • 根据您的图的曲线半径

答案 1 :(得分:0)

我没有通过数学计算,而是想通过编程方式绘制出适合所有象限的曲线。

此算法如下: (这是一个算法,用于找到Bézier曲线的控制点,适用于所有象限,这意味着您将获得Bézier曲线的动态控制点 。)

问题:给定3点a,b,c,任务是以角度abc绘制曲线(曲线结构固定,如问题中的图所示)。

  1. 在功能中取得所有3点a,b,c。

  2. 将所有3点a,b,c转换为相对于a点的原点。

  3. 查找第3个点是左侧还是右侧。

  4. 旋转第二个点b以与x轴重合。

  5. 在第4步之后,您处于零位。

    (这里你可以根据需要选择Bézier曲线的控制点。你不需要解决控制点的任何关系。你可以使用简单的加/减数学设置控制点。)控制点这里获得的所有象限都是完美的。

  6. 在步骤5之后,我们获得Bézier曲线的所有控制点,现在将所有这些点都移到原始位置,
    一个。首先旋转点b和两个控制点(步骤4中的旋转角度b)
    湾将所有点转换回原始位置(即相对于点a - 从步骤1开始逆转转换)。

  7. 现在,您可以获得适合所有象限的立方Bézier所需的控制点 使用Bézier曲线函数绘制曲线。