NOJ [1353] Circles And Lines 求圆与线的关系

  • [1353] Circles And Lines

  • 时间限制: 1000 ms 内存限制: 65535 K
  • 问题描述
  • Ok.A circle , x y is the centre,z is radius.
    A line , have pass the x1,y1,x2,y2.
    Ok,see example.
  • 输入
  • This have some cases.
    Each cases,have 7 numbers ,x,y,z,x1,y1,x2,y2.
  • 输出
  • See detail in the Sample Output please.
  • 样例输入
  • 0 0 1 1 0 1 1
    0 0 1 1 0 0 1
    0 0 1 2 0 0 2
    0 0 1 2 0 0 3
    
  • 样例输出
  • CASE 1: Tangent.
    Case 2: Intersect..
    CASE 3: Away...
    Case 4: Away....
    
  • 提示
  • 来源
  • Mr.wang *
  • 操作

    题意 :  输入圆的坐标及半径  输入直线经过的2个点 问直线和圆的关系 是相交  相离 还是相切

     

    注意  点到直线的距离公式  : fabs(ax+by+c)/sqrt(a*a+b*b)     其中上面的是带绝对值的  就因为这里错了n次

     

    #include<stdio.h>
    #include<string.h>
    #include<math.h>
    #define dou 0.0000001
    int main()
    {
    	double d,x,y,z,x1,y1,x2,y2,k,i;
    	int cnt=0,flag;
    	while(scanf("%lf %lf %lf %lf %lf %lf %lf",&x,&y,&z,&x1,&y1,&x2,&y2)!=EOF)
    	{ 
    		flag=0; 
    		cnt++;
    		if(y1==y2)
    		{
    			//if(y1==y-z||y1==y+z)  flag=2;
    			if(fabs(y1-y+z)<1e-6||fabs(y1-y-z)<1e-6)  flag=2;
    			else
    			//	if(y1>y-z &&y1<y+z) flag=3;
    			if(y1-y+z>1e-6&&y1-y-z<-1e-6) flag=3;
    				
    				else  flag=1;
    		}
    		else if(x1==x2)
    		{
    			 
    			if(fabs(x1-x+z)<1e-6||fabs(x1-x-z)<1e-6)  flag=2;
    			else
    			//	if(y1>y-z &&y1<y+z) flag=3; // 注意不要用这种方式比较浮点型的大小  尽量如下表示
    			if(x1-x+z>1e-6&&x1-x-z<-1e-6) flag=3;
    				
    				else  flag=1;
    		}
    		else
    		{
    			k=(x1-x2)/(y1-y2);
    			d=fabs((k*y-x-k*y1+x1))/sqrt(k*k+1);
    		 
    				if(fabs(d-z)<1e-6) flag=2;
    				else
    					if(d-z<-1e-6)  flag=3;
    					else flag=1;
    		}
    		if(cnt%2==0)
    			printf("Case %d: ",cnt);
    		else printf("CASE %d: ",cnt);
    
    		if(flag==1)
    			printf("Away",cnt); 
    		else if(flag==2)
    			printf("Tangent",cnt);
    		else if(flag==3)
    			printf("Intersect",cnt);
    		 
    		for(i=1;i<=cnt;i++)
    			printf(".");
    		printf("\n");
    	}
    	
    	return 0;
    }
    
    
    


     

  • 你可能感兴趣的:(NOJ [1353] Circles And Lines 求圆与线的关系)