题目描述
平面直角坐标系中有一个点 C 和一条线段 AB ,求点 C 和线段 AB 的位置关系。
输入描述
第一行输入一个 T ,代表测试数据量
每组测试数据输入有三行,每行一个实数坐标 (x, y)分别代表 A,B,C 三个点。
输出描述
如果点 C 在线段 AB 上, 输出Yes
,否则输出No
;
输入输出样例
示例 1
输入
1. 2 2. 0 1 3. 1 0 4. 1 1 5. 0 0 6. 2 2 7. 1 1
输出
1. No 2. Yes
运行限制
- 最大运行时间:1s
- 最大运行内存: 128M
思路:
这道题给了我们两个点组成的一条线段AB,还有一个额外的点C,要我们判断这个C点是否在这个直线上,我们可以先判断这个点是否在直线AB上,这里我们可以通过斜率判定,或者把他看成叉积来判定。再判断这个点是否在AB线段所在的区域内,如果都满足条件的话,我们判定该点在线段上,否则不在。
代码:
1. def Cross(a,b,c): 2. if (c[0]-a[0])*(a[1]-b[1])==(c[1]-a[1])*(a[0]-b[0])\ #判断是否共线 3. and min(a[0],b[0])<=c[0] and c[0]<=max(a[0],b[0])\ #判断是否在同一区域内 4. and min(a[1],b[1])<=c[1] and c[1]<=max(a[1],b[1]): 5. 6. return True 7. else: 8. return False 9. 10. t=int(input()) 11. for i in range(t): 12. a=tuple(map(float,input().split())) 13. b=tuple(map(float,input().split())) 14. c=tuple(map(float,input().split())) 15. if Cross(a,b,c): 16. print("Yes") 17. else: 18. print("No")