Advertisement
Guest User

Untitled

a guest
Dec 13th, 2013
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.28 KB | None | 0 0
  1. // миллионная переработка.cpp: определяет точку входа для консольного приложения.
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include <iostream>
  6. using namespace std;
  7.  
  8.  
  9. struct Point
  10. {
  11.    float x, y;
  12. };
  13. double e=0;
  14. float dest(const Point& p1, const Point& p2)
  15. {
  16.     return (sqrt((p1.x - p2.x)*(p1.x - p2.x) + (p1.y - p2.y)*(p1.y - p2.y)));
  17.  
  18.  
  19. }
  20. bool TryToFormSquare(const Point& p1, const Point& p2, const Point& p3, const Point& p4)
  21. {
  22.     if ((abs(dest(p2, p1) - dest(p2, p3))<=e) && (abs(dest(p2, p3) - dest(p4, p3))<=e) && (abs(dest(p4, p3) - dest(p4, p1))<=e) && (abs(dest(p3, p1) - dest(p2, p4))<=e))
  23.    {return true;}
  24.     else if ((abs(dest(p3, p1) - dest(p2, p3))<=e) && (abs(dest(p2, p3) - dest(p2, p4))<=e) && (abs(dest(p2, p4) - dest(p1, p4))<=e) && (abs(dest(p2, p1) - dest(p3, p4))<=e))
  25.    {return true;}
  26.     else if ((abs(dest(p2, p1) - dest(p2, p4)) <= e) && (abs(dest(p2, p4) - dest(p3, p4)) <= e) && (abs(dest(p3, p4) - dest(p3, p1)) <= e) && (abs(dest(p1, p4) - dest(p3, p2)) <= e))
  27.    {return true;}
  28.    else {return false;}
  29. }
  30. float HalfPerim(float a, float b, float c)
  31. {
  32.     return ((a+b+c)/2);
  33. }
  34.  
  35. float square(const Point& p, const Point& p2, const Point& p4)
  36.     {
  37.     return (sqrt(HalfPerim(dest(p, p2), dest(p, p4), dest(p2, p4))*((HalfPerim(dest(p, p2), dest(p, p4), dest(p2, p4))) - dest(p, p2))*((HalfPerim(dest(p, p2), dest(p, p4), dest(p2, p4))) - dest(p2, p4))*((HalfPerim(dest(p, p2), dest(p, p4), dest(p2, p4))) - dest(p, p4))));
  38.  
  39.        
  40.     }
  41.  
  42.    
  43. bool IsPointInsideRect(const Point& p, const Point& p1, const Point& p2, const Point& p3, const Point& p4)
  44. {
  45.    
  46.     if ((abs(dest(p2, p1) - dest(p2, p3)) <= e) && (abs(dest(p2, p3) - dest(p4, p3)) <= e) && (abs(dest(p4, p3) - dest(p4, p1)) <= e) && (abs(dest(p3, p1) - dest(p2, p4)) <= e))
  47.     {
  48.         if ((square(p, p2, p4)) >= (square(p, p1, p3)))
  49.         {
  50.             if ((square(p, p2, p4)) <= ((dest(p1, p2)*dest(p1, p2)) / 2))
  51.             {
  52.                 return true;
  53.             }
  54.             else return false;
  55.  
  56.         }
  57.         else
  58.         {
  59.             if ((square(p, p2, p4)) < (square(p, p1, p3)))
  60.             {
  61.                 if ((square(p, p1, p3)) <= ((dest(p1, p2)*dest(p1, p2)) / 2))
  62.                 {
  63.                     return true;
  64.                 }
  65.                 else return false;
  66.             }
  67.  
  68.         }
  69.     }
  70.     else if ((abs(dest(p3, p1) - dest(p2, p3)) <= e) && (abs(dest(p2, p3) - dest(p2, p4)) <= e) && (abs(dest(p2, p4) - dest(p1, p4)) <= e) && (abs(dest(p2, p1) - dest(p3, p4)) <= e))
  71.     {
  72.         {
  73.             if ((square(p, p1, p2)) >= (square(p, p3, p4)))
  74.             {
  75.                 if ((square(p, p1, p2)) <= ((dest(p1, p3)*dest(p1, p3)) / 2))
  76.                 {
  77.                     return true;
  78.                 }
  79.                 else return false;
  80.  
  81.             }
  82.             else
  83.             {
  84.                 if ((square(p, p1, p2)) < (square(p, p3, p4)))
  85.                 {
  86.                     if ((square(p, p1, p2)) <= ((dest(p1, p3)*dest(p1, p3)) / 2))
  87.                     {
  88.                         return true;
  89.                     }
  90.                     else return false;
  91.                 }
  92.  
  93.             }
  94.         }
  95.     }
  96.     else if ((abs(dest(p2, p1) - dest(p2, p4)) <= e) && (abs(dest(p2, p4) - dest(p3, p4)) <= e) && (abs(dest(p3, p4) - dest(p3, p1)) <= e) && (abs(dest(p1, p4) - dest(p3, p2)) <= e))
  97.     {
  98.         {
  99.             if ((square(p, p2, p3)) >= (square(p, p1, p4)))
  100.             {
  101.                 if ((square(p, p2, p3)) <= ((dest(p1, p2)*dest(p1, p2)) / 2))
  102.                 {
  103.                     return true;
  104.                 }
  105.                 else return false;
  106.  
  107.             }
  108.             else
  109.             {
  110.                 if ((square(p, p2, p3)) < (square(p, p1, p4)))
  111.                 {
  112.                     if ((square(p, p2, p3)) <= ((dest(p1, p2)*dest(p1, p2)) / 2))
  113.                     {
  114.                         return true;
  115.                     }
  116.                     else return false;
  117.                 }
  118.  
  119.             }
  120.         }
  121.     }
  122.     else { return false; }
  123. }
  124. struct squarer
  125. {
  126.     Point p1, p2, p3, p4;
  127.  
  128.  
  129. };
  130. int main()
  131. {
  132.  //  Point points[MAX_N];
  133.     cout << "Please enter e>0:\n";
  134.     cin >> e;
  135.    int N = 0;
  136.    cout<<"input point\n";
  137.     cin>>N;
  138.     Point *points=new Point[N];
  139.     squarer *quader = new squarer[N];
  140.     cout<<"Please, enter N points:\n";
  141.     for(int i=0;i<N;i++)
  142.     {cin>>points[i].x>>points[i].y;}
  143.  
  144.    int maxPointsInRect = -1;
  145.    float maxPoint1x = 0;
  146.    float maxPoint1y = 0;
  147.    float maxPoint2x = 0;
  148.    float maxPoint2y = 0;
  149.    float maxPoint3x = 0;
  150.    float maxPoint3y = 0;
  151.    float maxPoint4x = 0;
  152.    float maxPoint4y = 0;
  153.  
  154.  int temp = 0;
  155.    for (int i1 = 0; i1 < N-3; ++i1)
  156.       for (int i2 = i1+1; i2 < N-2; ++i2)
  157.           for (int i3 = i2+1; i3 < N-1; ++i3)
  158.              for (int i4 = i3+1; i4 < N; ++i4)
  159.                if (TryToFormSquare(points[i1], points[i2], points[i3], points[i4]))
  160.                {
  161.                   cout << "Found rectange with points. Coordinates of points: " << points[i1].x <<" "<<points[i1].y << ", "<< points[i2].x <<" "<<points[i2].y << ", " << points[i3].x <<" "<<points[i3].y << ", " << points[i4].x <<" "<<points[i4].y << ", " << endl;
  162.                  
  163.                       temp++;
  164.                       quader[temp].p1 = points[i1];
  165.                       quader[temp].p2 = points[i2];
  166.                       quader[temp].p3 = points[i3];
  167.                       quader[temp].p4 = points[i4];
  168.                      
  169.                  
  170.                   int pointsInRect = 0;
  171.                
  172.                   for (int j = 0; j < N; ++j)
  173.                      if (j != i1 && j != i2 && j != i3 && j != i4)
  174.                         if (IsPointInsideRect(points[j], points[i1], points[i2], points[i3], points[i4]))
  175.                            ++pointsInRect;
  176.                
  177.                   if (pointsInRect > maxPointsInRect)
  178.                   {
  179.                      maxPointsInRect = pointsInRect;
  180.                      maxPoint1x = points[i1].x;
  181.                      maxPoint1y = points[i1].y;
  182.                      maxPoint2x = points[i2].x;
  183.                      maxPoint2y = points[i2].y;
  184.                      maxPoint3x = points[i3].x;
  185.                      maxPoint3y = points[i3].y;
  186.                      maxPoint4x = points[i4].x;
  187.                      maxPoint4y = points[i4].y;
  188.                   }
  189.                }
  190.  
  191.                if ((maxPointsInRect == -1) || (maxPointsInRect == 0))
  192.    {
  193.      cout << "No rectangles are found" << endl;
  194.    }
  195.    else
  196.    {
  197.        cout << "Maximus points number inside a rectagle is " << maxPointsInRect << "." << endl << " Rectange is build from points with coordinates " << maxPoint1x << " " << maxPoint1y << ", " << maxPoint2x << " " << maxPoint2y << ", " << maxPoint3x << " " << maxPoint3y << ", " << maxPoint4x << " " << maxPoint4y << endl;
  198.    }
  199.                cout << endl << endl << endl << endl;
  200.                for (int i = 1; i <= temp; i++)
  201.                {
  202.                    cout << quader[i].p1.x << " " << quader[i].p1.y << "; " << quader[i].p2.x << " " << quader[i].p2.y << "; " << quader[i].p3.x << " " << quader[i].p3.y << "; " << quader[i].p4.x << " " << quader[i].p4.y << endl;
  203.                }
  204. delete[] points;
  205.                
  206. return 0;
  207. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement