t_delta = math.ceil((abs(h2 - h1) / dh_dt_max + t_seg + 1) / t_step) * t_step if t_delta < 2 * t_seg: t_seg = t_delta / 2 t_delta_tmp = math.ceil(abs(h2 - h1) / dh_dt_max * 4) if t_delta_tmp < t_delta: t_ramp = np.arange(0, t_delta_tmp + 1, t_step) h_ramp = gradient_wave(h1, h2, t_ramp) return [t_ramp, h_ramp] dh_dt = (h2 - h1) / (t_delta - t_seg) t_ramp = np.arange(0, t_delta + 1, t_step) h_ramp = np.zeros(len(t_ramp)) for i, t in enumerate(t_ramp): if t <= t_seg: h_ramp[i] = dh_dt / t_seg / 2 * t**2 + h1 elif t <= t_delta - t_seg: h_ramp[i] = h_ramp[i - 1] + dh_dt * t_step else: h_ramp[i] = -dh_dt / t_seg / 2 * (t_delta - t)**2 + h2 return [t_ramp, h_ramp] def gradient_wave(h1, h2, t): h = np.zeros(len(t)) for i, it in enumerate(t): dt = it / t[-1] h[i] = h1 + (h2 - h1) * (3 * dt**2 - 2 * dt**3) return h
时间: 2024-04-17 20:28:26 浏览: 173
JavaScript Math.ceil() 函数使用介绍
这段代码是一个用于生成渐变波形的函数。根据输入的起始高度 `h1`,目标高度 `h2`,和时间间隔 `t`,函数会返回一个时间和高度的数组。
首先,计算出总时间步长 `t_delta`。然后判断是否需要缩短渐变段时间 `t_seg`,使得总时间步长不小于两倍的渐变段时间。如果需要缩短渐变段时间,则根据最大高度变化率 `dh_dt_max` 计算出新的总时间步长 `t_delta_tmp`。如果新的总时间步长小于原来的总时间步长,则生成一个新的时间数组 `t_ramp` 和对应的高度数组 `h_ramp`,并返回。
如果不需要缩短渐变段时间,计算出高度变化率 `dh_dt`。然后,生成时间数组 `t_ramp` 和初始高度数组 `h_ramp`,并根据时间来计算每个时间点对应的高度。最后返回时间数组 `t_ramp` 和高度数组 `h_ramp`。
在这段代码中还有一个辅助函数 `gradient_wave`,用于计算给定时间点的高度值。根据输入的起始高度 `h1`,目标高度 `h2` 和时间比例 `dt`,函数使用三次方程计算出对应的高度值,并返回。
阅读全文