关于我们

质量为本、客户为根、勇于拼搏、务实创新

< 返回新闻公共列表

判断点是否在线段上

发布时间:2023-06-27 16:00:11

题目描述


平面直角坐标系中有一个点 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")

/template/Home/leiyu/PC/Static