正弦波UIBezierPath两点之间

时间:2017-01-25 17:51:07

标签: swift uibezierpath

如何在两点之间创建正弦波路径?

我能够从原点创建正弦波的路径,但不确定方向是如何变换的,以便正弦波在目标CGPoint处结束。

我想使用SKAction.followPath

在路径上为SKNode设置动画

2 个答案:

答案 0 :(得分:3)

最简单的思考方法是变换坐标系,按两点之间的角度旋转,按它们之间的距离缩放,并按第一点平移(假设正弦从0,0开始)。 / p>

OP指出他并不只是想绘制曲线(在这种情况下,所有人都需要做的是将变换应用于图形上下文),而是使用SpriteKit中的曲线{{ 1}}调用,因此变换必须应用于路径中的坐标,而不是上下文。

这是使用SKAction.followPath而不是CGPath的解决方案,但它们是等效的,您可以通过UIBezierPath简单地获取UI版本。 (我更喜欢CoreGraphics,因为它们是跨平台的)。

游乐场代码......

let uip = UIBezierPath(cgPath: path)

Playground output...

答案 1 :(得分:1)

不清楚你想要什么,但这里有一种可能性,假设你想要一条倾斜的正弦曲线:

假设起点为(0,0),终点为(x,y)。

设L是原点与点之间的距离:L = sqrt(x ^ 2 + y ^ 2)

写一个从0开始并以L结束的循环,增量为dL,运行总和l(最终在0和L之间运行)。这个循环将允许我们在Bezier上创建点。

然后你的sin图的x坐标将是:        x_P = l * cos(theta),范围从0到L * cos(theta)= x

要获得y坐标,我们将一个正确周期的sin函数添加到原点和点之间的斜线:        y_P = l * sin(theta)+ sin(2 * PI * l / L)

请注意,在l = L时,(x_P,y_P)=(x,y),应该是这样。

这是你想要的吗?它不是旋转,因此在角度θ大时不会表现。