11.10作业 Problem B: 说好的点呢

来源:互联网 发布:知乎 嘉庚创业 编辑:程序博客网 时间:2024/04/29 19:57

Description

两点确定一条直线,判断一条直线与一个圆的位置关系。

Input

输入中前两行每行描述一个点的坐标(x,y),x,y均为实数。

第三行包含三个实数,即圆心坐标和圆的半径R>0。

Output

输出包含三种情况,计算误差应在1e-3(0.001)内。

“Interseetion”(相交时输出);

“Tangency”(相切时输出);

“Disjoint”(相离时输出);

以上输出不含引号。

Sample Input

1 00 10 0 1

Sample Output

Interseetion

HINT

回忆中学的几何知识,最好能自己先想到此题的几何解,实在想不到,可以查查法线方程之类的,然后用程序实现。这里要用到浮点数的精度控制。


思路:

数学。控制精度。

如果要求斜率。讨论斜率不存在的情况。

代码:

#include <stdio.h>#include <limits.h>#include <math.h>int main(){    double x1,x2,y1,y2,X,Y,R,d,D,a,b,c;    scanf("%lf %lf",&x1,&y1);    scanf("%lf %lf",&x2,&y2);    scanf("%lf %lf %lf",&X,&Y,&R);    a=y2-y1;    b=x1-x2;    c=x2*y1-x1*y2;    d=fabs(a*X+b*Y+c)/sqrt(a*a+b*b);    if(d>R+0.001)        printf("Disjoint");    else if(d>=R-0.001&&d<=R+0.001)        printf("Tangency");    else        printf("Interseetion");}


0 0
原创粉丝点击