#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。
第三行输出状态 DONE、MOVE、CLIPPED 或 UNSAFE。
所有数值保留 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