csansoon

P9.06 P52274 Circles (3)

Dec 11th, 2018
419
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.84 KB | None | 0 0
  1. #include <iostream>
  2. #include <cmath>
  3. using namespace std;
  4.  
  5. struct Point {
  6.     double x, y;
  7. };
  8. struct Circle {
  9.     Point center;
  10.     double radius;
  11. };
  12.  
  13. double dist(const Point& a, const Point& b) {
  14.     return sqrt(pow(a.x-b.x,2)+pow(a.y-b.y,2));
  15. }
  16.  
  17. void move(Point& p1, const Point& p2) {
  18.     p1.x = p1.x + p2.x;
  19.     p1.y = p1.y + p2.y;
  20. }
  21. void move(Circle& c, const Point& p) {
  22.     c.center.x = c.center.x + p.x;
  23.     c.center.y = c.center.y + p.y;
  24. }
  25.  
  26. void scale(Circle& c, double sca) {
  27.     c.radius = c.radius * sca;
  28. }
  29.  
  30. bool is_inside(const Point& p, const Circle& c) {
  31.     return dist(c.center,p)<=c.radius;
  32. }
  33.  
  34. int relationship(const Circle& c1, const Circle& c2) {
  35.     if ( (c1.radius+c2.radius) < dist(c1.center,c2.center) ) return 0;
  36.     if (c2.radius >= c1.radius + dist(c1.center,c2.center) ) return 1;
  37.     if (c1.radius >= c2.radius + dist(c1.center,c2.center) ) return 2;
  38.     return 3;
  39. }
  40.  
  41. void printRelation(const Circle& c1, const Circle& c2) {
  42.     if (relationship(c1,c2)==0) cout<<"circles do not intersect"<<endl;
  43.     else if (relationship(c1,c2)==1) cout<<"the first circle is inside the second one"<<endl;
  44.     else if (relationship(c1,c2)==2) cout<<"the second circle is inside the first one"<<endl;
  45.     else if (relationship(c1,c2)==3) cout<<"circles intersect"<<endl;
  46. }
  47.  
  48.  
  49. int main() {
  50.     Circle c1,c2;
  51.     cin>>c1.center.x>>c1.center.y>>c1.radius>>c2.center.x>>c2.center.y>>c2.radius;
  52.     printRelation(c1,c2);
  53.     double n;
  54.     Point p;
  55.     string s;
  56.     while(cin>>n) {
  57.         cin>>s;
  58.         if (n==1) {
  59.             if (s=="scale") {
  60.                 cin>>n;
  61.                 scale(c1,n);
  62.             }
  63.             else if (s=="move") {
  64.                 cin>>p.x>>p.y;
  65.                 move(c1,p);
  66.             }
  67.         }
  68.         else if (n==2) {
  69.             if (s=="scale") {
  70.                 cin>>n;
  71.                 scale(c2,n);
  72.             }
  73.             else if (s=="move") {
  74.                 cin>>p.x>>p.y;
  75.                 move(c2,p);
  76.             }
  77.         }
  78.     printRelation(c1,c2);
  79.     }
  80. }
  81.  
  82. // (c) Carlos Sansón (Best pro1 delegate ever for sure) @csansoon
Advertisement
Add Comment
Please, Sign In to add comment