2021-02-27

python操作贝塞尔曲线

时间/移动次数

xs = [0.0, 1.0, 2.0, 3.0, 4.0, 5.0]

0.4-0.7 0.8-0.9

ys = [0, 0, distance * get_random_range(0.4, 0.8), distance, distance, distance]

贝塞尔曲线的基础线

plt.figure()
plt.plot(xs, ys, ‘b’) # 原曲线

在10-15步之间滑动完毕

num = random.randint(10, 15)

调用公式求出贝塞尔曲线的结果

b_xs, b_ys = bezier_curve(xs, ys, num)

或者 bezier曲线

plt.plot(b_xs, b_ys, ‘r’)
print(‘贝塞尔曲线Y点位置:’, b_ys)

每次移动距离

diff_y = list(map(lambda i: b_ys[i + 1] - b_ys[i], range(len(b_ys) - 1)))
print(‘由Y位置求出每次移动的距离:’, diff_y)

########## 计算抖动上下抖动 开始

求每次移动的平均值

mid = sum(diff_y) / len(diff_y)

将每次移动小于平均值的当前次设置符号位负

symbol = list(map(lambda i: 1 if i > mid else -1, diff_y))

移动的距离相比点位会少一个,所以在最前面插入 0

symbol.insert(0, 1)

每一次移动的立方根作为抖动,立方根算抖动

diff_three_sqrt = list(map(lambda i: pow(abs(i), get_random_range(0.22, 0.35)), diff_y))

为了绘制立方根,需要加一个数字

diff_three_sqrt.insert(0, 0)

每次抖动之后的位移

diff_shake_y = list(map(lambda i: diff_three_sqrt[i] * symbol[i], range(len(diff_three_sqrt))))

每次抖动的距离

print(‘每次抖动的距离:’, diff_shake_y)
diff_y_shake = list(map(lambda i: sum(diff_shake_y[:i]) + diff_shake_y[i], range(len(diff_shake_y))))
print(‘抖动的总距离(用于绘图):’, diff_y_shake)

黄色抖动线

plt.plot(b_xs, diff_y_shake, ‘y’)
plt.show()

########## 计算抖动上下抖动 结束

diff_shake_y = diff_shake_y[1:]

清除贝塞尔曲线的小数位,因为selenium只能滑动整数

forward_tracks = []
temp = 0
for i in diff_y:
t_i = round(i)
temp += i - t_i
forward_tracks.append(t_i)

计算清除之后不需要回调绘制补充的距离

back_tracks = [distance - sum(forward_tracks)]
tracks = {‘forward_tracks’: forward_tracks, ‘back_tracks’: back_tracks, ‘forward_tracks_y’: diff_shake_y}
print(tracks)
print(‘tracks’, sum(tracks[‘forward_tracks’]))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值