fork(1) download
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4. typedef long double ld;
  5. struct pt{
  6. ld x,y;
  7. pt operator +(pt a){return {a.x+x,a.y+y};}
  8. pt operator -(pt a){return {a.x-x,a.y-y};}
  9. pt operator *(ld a){return {a * x,a * y};}
  10. pt operator /(ld a){return {x / a,y / a};}
  11. };
  12. ld crs(pt a,pt b){return (a.x*b.y-a.y*b.x);}
  13. pt prp(pt p){return {-p.y,p.x};}
  14. struct line{
  15. pt v; ld c;
  16. line(pt p,pt q):v(q-p),c(crs(v,p)){}
  17. line perp(pt p){return {p,p+prp(v)};}
  18. };
  19. pt intrsct(line l1,line l2){
  20. assert(crs(l1.v,l2.v)!=0);
  21. ld d = crs(l1.v,l2.v);
  22. pt ret = (l1.v*l2.c - l2.v*l1.c)/d;
  23. return ret;
  24. }
  25. pt read(){
  26. ld x,y;cin>>x>>y;
  27. return {x,y};
  28. }
  29. int main(){
  30. cout<<fixed<<setprecision(2);
  31. int t;
  32. cin>>t;
  33. int tst =0;
  34. while(t--){
  35. tst++;
  36. pt a,aa,b,bb;
  37. pt ma,mb;
  38. a = read();
  39. b = read();
  40. aa = read();
  41. bb = read();
  42. ma = (a+aa)/2;
  43. mb = (b+bb)/2;
  44. line l1 = {a,aa};
  45. line l2 = {b,bb};
  46. l1 = l1.perp(ma);
  47. l2 = l2.perp(mb);
  48. pt out = intrsct(l1,l2);
  49. cout<<"Caso #"<<tst<<": "<<out.x<<" "<<out.y<<endl;
  50. }
  51. return 0;
  52. }
  53.  
Success #stdin #stdout 0s 15240KB
stdin
3
12.00 2.00
5.00 6.00
10.00 8.00
2.00 7.00
0.50 -0.50
-1.00 0.00
-0.50 -0.50
0.00 1.00
0.50 6.50
-10.50 -3.50
-1.50 6.50
-5.50 -8.50
stdout
Caso #1: 2.00 2.00
Caso #2: 0.00 -0.00
Caso #3: -0.50 1.50