如何使用这个复杂的参数方程在iOS

时间:2016-02-29 15:32:53

标签: ios graphics drawing quartz-graphics parametric-equations

刚刚发现这个演示代码在iOS中使用参数方程式绘制 enter image description here

你可以看到关键代码是生成这个点数组

let points: [CGPoint] = 0.stride(to: M_PI * 2, by: 0.01).map
{
    let x = pow(sin($0), 3)
    var y = 13 * cos($0)
    y -= 5 * cos(2 * $0)
    y -= 2 * cos(3 * $0)
    y -= cos(4 * $0)
    y /= 16

    return CGPoint(x: 320 + (x * 300), y: 280 + (y * -300))
}

刚刚使用this equation
enter image description here

现在我要绘制的内容更为复杂mao curve

enter image description here

但我遇到的问题是网站提供的参数方程中有一个数学符号,我不知道如何转换为iOS代码,这一个是 enter image description here

更新:现在我遇到了一个新问题:"表达太复杂,无法在合理的时间内解决#34;任何想法除了将其分解为小的表达式,如心脏曲线在其{{1}中所做的上面,因为手动分解它太压倒了

enter image description here

并且整个代码列在下面

y

1 个答案:

答案 0 :(得分:3)

这里有一些问题:

  1. 如果查看该网站上该公式的底部,则会将θ定义为Heaviside step function

  2. 你正在进行整数除法。你真的想做浮点除法。例如。而不是10/47,您需要10.0/47.0

  3. 您正在从0迈向,但您需要从0转到104π

  4. 这些公式太复杂,Swift无法编译。您希望将它们分成不同的行。

  5. 在网上发现的那个等式中,有一些看似好奇的东西,即两次出现θ(sqrt(sgn(sin(t/2))))。取sgn函数的平方根是错误的(不是-1的真实平方根)。所以我将这些简化为θ(sin(t/2)),曲线表现得更合理。

  6. 将所有内容整合在一起,我已经采用了您的代码示例,完成了一些宏将这些长公式拆分为单独的语句,最终得到类似代码片段的内容:https://gist.github.com/robertmryan/427f7e9b562ae153c7c1(Stack Overflow)是不允许我在这里粘贴完整代码,因为它超过了帖子的最大允许长度。)

    产生以下图像:

    Mao curve

    注意,所有那些回到原点的恼人线都是这条毛线曲线表示的结果。它不是一个笔划,而是一系列错误存储的单独曲线存储为一组点。您可以测试0.0, 0.0,以消除它,但我个人将其分解为单独的点阵列。我会留给你的。