首页 > 解决方案 > 如何改变二维空间中的螺旋运动?

问题描述

正如我们在图中看到的那样,我在 2D 空间中有两个点从蓝点移动到红点,我们可以使用等式 (1)。其中b是一个常数,用来限制对数螺线的形状,l是[−1,1]中的一个随机数,用来控制运动的压痕效果,D表示蓝点到当前的距离观点

在此处输入图像描述

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

在此处输入图像描述

标签: geometrycomputational-geometryspiral

解决方案


您可以使用正弦模型。

对于起点(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)

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

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)

绘制点:

在此处输入图像描述


推荐阅读