你可以看到关键代码是生成这个点数组
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
现在我要绘制的内容更为复杂mao curve
但我遇到的问题是网站提供的参数方程中有一个数学符号,我不知道如何转换为iOS代码,这一个是
更新:现在我遇到了一个新问题:"表达太复杂,无法在合理的时间内解决#34;任何想法除了将其分解为小的表达式,如心脏曲线在其{{1}中所做的上面,因为手动分解它太压倒了
并且整个代码列在下面
y
答案 0 :(得分:3)
这里有一些问题:
如果查看该网站上该公式的底部,则会将θ
定义为Heaviside step function。
你正在进行整数除法。你真的想做浮点除法。例如。而不是10/47
,您需要10.0/47.0
。
您正在从0
迈向2π
,但您需要从0
转到104π
。
这些公式太复杂,Swift无法编译。您希望将它们分成不同的行。
在网上发现的那个等式中,有一些看似好奇的东西,即两次出现θ(sqrt(sgn(sin(t/2))))
。取sgn
函数的平方根是错误的(不是-1
的真实平方根)。所以我将这些简化为θ(sin(t/2))
,曲线表现得更合理。
将所有内容整合在一起,我已经采用了您的代码示例,完成了一些宏将这些长公式拆分为单独的语句,最终得到类似代码片段的内容:https://gist.github.com/robertmryan/427f7e9b562ae153c7c1(Stack Overflow)是不允许我在这里粘贴完整代码,因为它超过了帖子的最大允许长度。)
产生以下图像:
注意,所有那些回到原点的恼人线都是这条毛线曲线表示的结果。它不是一个笔划,而是一系列错误存储的单独曲线存储为一组点。您可以测试0.0, 0.0
,以消除它,但我个人将其分解为单独的点阵列。我会留给你的。