游戏中的抛射轨迹可以先规定到达目标所需时间,再反求初速度。这样落点和时刻都是明确的,不过中途是否越过障碍仍须单独检查,不能只看最终落在目标上。
规则与边界
水平位置从零到距离D,高度从y0到y1,总时间T,向下加速度大小g。水平速度为D除T,竖直初速度为(y1减y0加g乘T平方除二)除T。任意时刻高度为y0加竖直初速度乘t,再减g乘t平方除二。
本例记录
参数{'distance': 14, 'time': 5, 'g': 4, 'start_y': 0, 'target_y': 8, 'obstacles': [[3, 10], [4, 12], [5, 13], [6, 20], [8, 19], [9, 18]]}。初速度水平14/5、竖直58/5。
障碍水平位置、高度 | 到达时间 | 轨迹高度 | 高度差 | 严格越过 [3, 10] | 15/14 | 993/98 | 13/98 | True [4, 12] | 10/7 | 612/49 | 24/49 | True [5, 13] | 25/14 | 1405/98 | 131/98 | True [6, 20] | 15/7 | 768/49 | -212/49 | False [8, 19] | 20/7 | 824/49 | -107/49 | False [9, 18] | 45/14 | 1629/98 | -135/98 | False 九个均匀时间样本:['0', '207/32', '91/8', '471/32', '33/2', '535/32', '123/8', '399/32', '8'] 区间最高点时刻29/10,高度841/50。
表中编号只标记本例对象,不表示排名或另一组数据中的身份。先确认输入单位与边界约定,再逐步核对中间值。零、空结果和不存在是不同状态,不能因为显示相近就互相替代;分数用精确形式保留,便于重新演算。
复核方法
障碍位于水平距离x时,到达它的时刻是x乘T除D。把这个时刻代回高度,严格大于障碍高度才标为越过,等于则算接触。检查落点高度与给定y1一致,再找竖直速度变为零时的最高点。
总时间变长通常会改变所需竖直速度和中途高度,并不只是把同一条轨迹播放慢一点。练习中可以比较几个障碍,保留各自的到达时刻和高度差。实际碰撞若涉及有宽度的平台,应检查整个进入范围,单个水平截面还不足以保证通过。
能说明什么
本例物体视为质点,没有空气阻力、风、碰撞体宽度或飞行途中控制。最高点只在零到T的区间内取值,若轨迹一直上升或下降,区间最高位置可能就是某个端点。
这份记录用于理解明确规则下的游戏机制。改变输入后,结果也应随之重新计算;若操作规则不同,应先把新规则写清再比较。可以从一两个步骤手算开始,找出第一处差异,而不是只对照最后一个数值。全部中间记录都属于当前案例,不能直接当成其他场景的固定答案。