#AEAI04011. 末端扫掠体碰撞检测
末端扫掠体碰撞检测
题目描述
机械臂末端从起点直线移动到终点时,工具会扫过一条带半径的通道。给出工具半径、工作空间边界、安全距离和若干矩形障碍,请判断这次直线移动是否安全。
工具需要额外保留安全距离,因此有效半径为 R = r_tool + d_safe。起点和终点都必须距离工作空间边界严格大于 R;移动线段到任一矩形障碍的最短距离也必须严格大于 R。
输入格式
第一行输入 sx sy ex ey r_tool,表示起点、终点和工具半径。
第二行输入工作空间矩形 xmin ymin xmax ymax。
第三行输入安全距离 d_safe。
第四行输入障碍数量 B。
接下来 B 行,每行输入 id x1 y1 x2 y2,表示一个轴对齐矩形障碍。
输出格式
若起点或终点离边界过近,输出:
COLLIDE 0 BOUNDARY
否则若移动线段与某个障碍的安全膨胀区域相交,输出第一个碰撞障碍:
COLLIDE id OBSTACLE
若没有碰撞,输出 CLEAR。
判定规则
使用标准输出比较。边界和障碍判断都不允许贴边:距离等于有效半径时视为碰撞。障碍按输入顺序检测,输出第一个发生碰撞的障碍编号。
数据范围与测试提示
- 正式测试会覆盖样例没有出现的边界输入,请不要依赖样例规模或样例顺序写特判。
- 输出只包含题目要求的字段,不要输出调试信息;浮点结果按题面要求保留 6 位小数。
- 起点或终点距离工作空间边界等于有效半径时也不安全,不允许贴边通过。
- 障碍按输入顺序检查并输出第一个碰撞编号,线段与矩形距离等于有效半径时视为碰撞。
- 障碍按输入顺序输出第一个碰撞编号;起终点贴边或线段距离等于有效半径都视为碰撞。
样例
输入样例 1
0 0 5 0 0.2
-1 -1 10 1
0.1
1
1 6 -1 7 1
输出样例 1
CLEAR
输入样例 2
0 0 5 0 0.2
-1 -1 10 1
0.1
1
1 2 -1 3 1
输出样例 2
COLLIDE 1 OBSTACLE