如何改变 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 轴,幅度 A
,N
个周期,距离 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)
画点数:
我在 2D 中有两个点 space 如图所示,要从蓝点移动到红点,我们可以使用等式 (1)。其中b为常数,用于限制对数螺线的形状,l为[−1,1]中的随机数,用于 控制移动的缩进效果,D表示蓝色点距离当前点的距离
我需要另一个可以从蓝点移动到红点的动作,如图所示
您可以使用正弦模型。
对于起点(X0, Y0)
和终点(X1,Y1)
,我们有向量end-start,确定它的长度-点之间的距离L
,以及向量的角度Fi
(使用 atan2
)。
然后为某些标准情况生成正弦曲线 - 例如,沿 OX 轴,幅度 A
,N
个周期,距离 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)
画点数: