首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何改变二维空间中的螺旋运动?

如何改变二维空间中的螺旋运动?
EN

Stack Overflow用户
提问于 2021-08-11 13:11:48
回答 1查看 80关注 0票数 0

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-11 19:31:14

你可以使用正弦模型。

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

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

使用参数t缩放中间点中的正弦波,其中t0..1范围内(t=0对应于起点(X0,Y0))

代码语言:javascript
运行
AI代码解释
复制
X(t) = t * L
Y(t) =  A * Sin(2 * N * Pi * t)

然后使用上面计算的XY来平移和旋转正弦波

代码语言:javascript
运行
AI代码解释
复制
X_result = X0 + X * Cos(Fi) - Y * Sin(Fi)
Y_result = Y0 + X * Sin(Fi) + Y * Cos(Fi)

Python代码示例:

代码语言:javascript
运行
AI代码解释
复制
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)

绘制点:

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68748973

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档