#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