题目描述
给出一个圆的圆心坐标与圆的半径,和一条直线上的两点坐标,求这条直线与圆有多少个交点。
输入
输入3个实数x,y,r值分别表示圆心坐标与圆的半径,输入4个实数x1,y1,x2,y2表示直线上的两点。多实例,输入到文件尾结束。
输出
输出直线与圆的交点个数。
样例输入
复制
1 1 1 0 0 1 1
样例输出
复制
2
代码:需要特殊考虑斜率不存在 的情况,其他情况一样,按照之前学的圆与直线的交点来写,与半径r比较的时候需要考虑精度。
1 #include<stdio.h>
2 #include<math.h>
3 #include <iostream>
4 #include<algorithm>
5 using namespace std;
6 int main()
7 {
8 double x,y,r,x1,y1,x2,y2;
9 double k,b,d;
10 while(scanf("%lf %lf %lf %lf %lf %lf %lf",&x,&y,&r,&x1,&y1,&x2,&y2)!=EOF)
11 {
12 if(fabs(x2-x1)<1e-10)//斜率不存在
13 d=fabs(x-x1);
14 else
15 {
16 k=(y2-y1)/(x2-x1);
17 b=y1-k*x1;
18 d=fabs(k*x-y+b)/sqrt(k*k+1);
19 }
20 if(fabs(d-r)<1e-10)
21 printf("1\n");
22 else if(d<r)
23 printf("2\n");
24 else
25 printf("0\n");
26 }
27 return 0;
28 }
浙公网安备 33010602011771号