Giao của đường thẳng và đường tròn


Submit solution

Points: 2 (partial)
Time limit: 1.0s
Memory limit: 10M

Author:
Problem type
Allowed languages
Ada, Assembly, Awk, C, C++, C11, CLANG, CLANGX, Classical, COBOL, Coffee, CSC, D lang, DART, F95, FORTH, Fortrn, GAS32, GO, Haskell, Itercal, Java, kotlin, LEAN, LISP, LUA, MONOVB, Nasm, OCAML, Pascal, Perl, php, PIKE, prolog, Pypy, Python, Ruby 2, RUST, Scala, SCM, SED, SWIFT, TCL, TUR, V8JS, VB, ZIG

Titi học về tọa độ Đề-các vuông góc thấy rất thích. Titi gặp phải bài toán khó là cho phương trình đường thẳng y=ax+b và đường tròn (xx0)2+(yy0)2=r2 tìm giao điểm của hai đường. Bạn hãy lập trình giúp Titi nhé

Input

Dòng một chứa hai số thực a,b là hệ số của phương trình đường thẳng y=ax+b(|a|,|b|104)

Dòng hai chứa 3 số thực tương ứng với tọa độ tâm x0,y0 có giá trị tuyệt đối không vượt quá 104 và bán kính hình tròn r(0<r104)

Ouput

Nếu hai đường không cắt nhau in ra "Hai duong khong cat nhau"

Nếu hai đường tiếp xúc in ra "Hai duong tiep xuc tai (x, y)" với x, y lấy độ chính xác 3 chữ số sau dấu chấm thập phân

Nếu hai đường cắt nhau tại hai điểm phân biệt in ra "Hai duong cat nhau tai hai diem phan biet (x1, y1) va (x2, y2)" trong đó x1,y1,x2,y2 lấy độ chính xác 3 chữ số thập phân và x1<=x2

enter image description here

Ví dụ 1

Input

Copy
1.0 10.0
0.0 0.0 2.0

Output

Copy
Hai duong khong cat nhau

Ví dụ 2

Input

Copy
0.0 2.0
0.0 0.0 2.0

Output

Copy
Hai duong tiep xuc tai (0.000, 2.000)

Ví dụ 3

Input

Copy
1.0 -2.0
0.0 0.0 2.0

Output

Copy
Hai duong cat nhau tai hai diem phan biet (0.000, -2.000) va (2.000, 0.000)

Chú ý: các khoảng trống trong các output để output cho đúng nhé

tichpx

Comments


  • 0
    tranchithanh2212  commented on Nov. 16, 2018, 1:17 a.m. edited
    Copy
    //Giao cua duong thang y=ax+b va duong tron (x-x0)^2+(y-y0)^2=r^2
    #include<stdio.h>
    #include<math.h>
    #define bp(x) (x)*(x)
    #define f(x) (a*x+b)
    int main()
    {
        double a,b,x0,y0,r,A,B,C,D,x1,x2;
        scanf("%lf%lf",&a,&b);
        scanf("%lf%lf%lf",&x0,&y0,&r);
        A=1+bp(a);
        B=-x0+(b-y0)*a;
        C=bp(x0)+bp(b-y0)-bp(r);
        D=B*B-A*C;
        if(D<0) printf("Hai duong khong cat nhau");
        else if(D==0) printf("Hai duong tiep xuc tai (%.3lf, %.3lf)",
        x1=-B/A,f(-B/A));
        else
        {
            D=sqrt(D); x1=(-B-D)/A; x2=(-B+D)/A;
            printf("Hai duong cat nhau tai hai diem phan biet (%.3lf,%.3lf) va (%.3lf,%.3lf)",
            x1,f(x1),x2,f(x2));
            }
    
    
    
        }