1468 : 硬币

时间限制Time Limit 1 Sec 内存限制Memory Limit 128 MB 提交次数Submitted 0 Times 通过次数Solved 0 Times 标准评测Standard Judge

题目描述Description

有一种桌面游戏曾经风靡一时,玩这个游戏非常方便,只需要三个一样大的硬币和一张平整的桌面。游戏的玩法也非常简单,玩家需要让被选中的一枚硬币沿着某一条直线移动,使其能够从另外两个硬币中间的空当穿过。移动的硬币不能撞到另外两枚硬币,但是允许在移动过程中相切。

现在给你三个硬币的大小和在平面直角坐标系中的位置,请你判断第一个硬币能否沿着某条直线穿过另外两枚硬币中间的空当。

输入格式Input

输入的第一行为一个正整数 T (1 \leq T \leq 10000),代表有 T 组数据

每组数据各占一行,为七个正整数 r, x1, y1, x2, y2, x3, y3 (0 < r \leq 1000) (-1000 \leq x1, y1, x2, y2, x3, y3 \leq 1000), r 为三个硬币的半径,(x1, y1) (x2, y2) (x3, y3) 分别为第一个第二个和第三个硬币的的位置。保证三个硬币在初始位置没有相交。

输出格式Output

每组数据输出一行,如果可以顺利穿过则输出”Yes”, 反之输出 “No”。 (不含引号,首字母大写)

样例Sample

提示Hint

计算几何————速通向量叉积

以下讨论都建立在最常见的右手系平面直角坐标系中

两个向量 a(x_1, y_1), b(x_2, y_2) 的叉积 a \times b 值为 x_1 * y_2 - x_2 * y_1

当这个值为一个正数的时候,我们就可以知道向量 b 在向量 a 的左侧,即使用右手定则判断时大拇指朝上,如图

反之,当这个值为一个负数的时候,我们就可以知道向量 b 在向量 a 的右侧,即使用右手定则判断时大拇指朝下,如图

当这个值等于 0 时我们就可以确定这两个向量的方向完全相同或完全相反。

出题Author

DOGGOD_Q