如何改变 2D space 中的螺旋运动?

How change the spiral movement in 2D space?

我在 2D 中有两个点 space 如图所示,要从蓝点移动到红点,我们可以使用等式 (1)。其中b为常数,用于限制对数螺线的形状,l为[−1,1]中的随机数,用于 控制移动的缩进效果,D表示蓝色点距离当前点的距离

我需要另一个可以从蓝点移动到红点的动作,如图所示

您可以使用正弦模型。

对于起点(X0, Y0)和终点(X1,Y1),我们有向量end-start,确定它的长度-点之间的距离L,以及向量的角度Fi (使用 atan2)。

然后为某些标准情况生成正弦曲线 - 例如,沿 OX 轴,幅度 AN 个周期,距离 2 * Pi * N:

带参数 t 的中间点的缩放正弦曲线,其中 t 在范围 0..1 内(t=0 对应于起点 (X0,Y0)

X(t) = t * L
Y(t) =  A * Sin(2 * N * Pi * t)

然后使用上面计算的 XY 移动和旋转正弦曲线

X_result = X0 + X * Cos(Fi) - Y * Sin(Fi)
Y_result = Y0 + X * Sin(Fi) + Y * Cos(Fi)

示例Python代码:

import math
x0 = 100
y0 = 100
x1 = 400
y1 = 200
nperiods = 4
amp = 120
nsteps = 20
leng = math.hypot(x1 - x0, y1 - y0)
an = math.atan2(y1 - y0, x1 - x0)
arg =  2 * nperiods* math.pi
points = []
for t in range(1, nsteps + 1):
    r = t / nsteps
    xx = r * leng
    yy =  amp * math.sin(arg * r)
    rx = x0 + xx * math.cos(an) - yy * math.sin(an)
    ry = y0 + xx * math.sin(an) + yy * math.cos(an)
    points.append([rx, ry])
print(points)

画点数: