#AEAI04019. 单步限幅位置修正

单步限幅位置修正

题目描述

反馈控制器每轮根据当前位置和目标位置给出一次三维修正命令。给出当前位置、目标位置、比例系数、死区阈值、单步最大幅度和安全边界,请计算本轮命令、预测位置和状态。

设误差向量为 target - cur。若误差长度不超过 eps,命令为零向量,预测位置保持当前位置,状态为 DONE。否则命令为 kp * error;若命令长度超过 step_max,按比例缩放到长度 step_max,状态先记为 CLIPPED,否则为 MOVE。最后若预测位置越出安全边界,状态改为 UNSAFE

输入格式

第一行输入当前位置 cx cy cz

第二行输入目标位置 tx ty tz

第三行输入 kp eps step_max

第四行输入安全边界 xmin xmax ymin ymax zmin zmax

输出格式

第一行输出命令向量 dx dy dz

第二行输出预测位置 px py pz

第三行输出状态 DONEMOVECLIPPEDUNSAFE

所有数值保留 6 位小数。

判定规则

使用标准输出比较。边界包含端点;若已在死区内,不再进行安全边界状态覆盖。只有需要移动时才检查预测位置是否越界。

数据范围与测试提示

  • 正式测试会覆盖样例没有出现的边界输入,请不要依赖样例规模或样例顺序写特判。
  • 输出只包含题目要求的字段,不要输出调试信息;浮点结果按题面要求保留 6 位小数。
  • 误差长度等于 eps 时直接 DONE,且不再用安全边界覆盖状态。
  • 命令长度超过 step_max 才限幅;预测位置边界包含端点,只有需要移动时才检查越界。
  • 误差等于 eps 时输出 DONE 且不检查安全边界;命令长度超过 step_max 才限幅。

样例

输入样例 1

0 0 0
0.1 0 0
1 0.2 1
-1 1 -1 1 -1 1

输出样例 1

0.000000 0.000000 0.000000
0.000000 0.000000 0.000000
DONE

输入样例 2

0 0 0
10 0 0
1 0.1 2
-100 100 -100 100 -100 100

输出样例 2

2.000000 0.000000 0.000000
2.000000 0.000000 0.000000
CLIPPED