/// <summary>
    /// Checks whether the two convex quadrilaterals intersect. Note that if one of the quadrilaterals is concave, the
    /// test may return a wrong result (so don't use them here).
    /// </summary>
    /// <returns>Returns <c>true</c> if both quadrilaterals intersect/overlap; returns <c>false</c> if they don't.
    /// </returns>
    public static bool CheckRectRectIntersection(Quadrilateral quad1, Quadrilateral quad2) {
      Point[] quad1Points = new Point[] { quad1.A, quad1.B, quad1.C, quad1.D };
      Point[] quad2Points = new Point[] { quad2.A, quad2.B, quad2.C, quad2.D };

      //
      // Check quad1 edges
      // 
      if (DoAxisSeparationTest(quad1.A, quad1.B, quad1.C, quad2Points)) {
        return false;
      }

      if (DoAxisSeparationTest(quad1.A, quad1.D, quad1.C, quad2Points)) {
        return false;
      }

      if (DoAxisSeparationTest(quad1.D, quad1.C, quad1.A, quad2Points)) {
        return false;
      }

      if (DoAxisSeparationTest(quad1.C, quad1.B, quad1.A, quad2Points)) {
        return false;
      }

      //
      // Check quad2 edges
      // 
      if (DoAxisSeparationTest(quad2.A, quad2.B, quad2.C, quad1Points)) {
        return false;
      }

      if (DoAxisSeparationTest(quad2.A, quad2.D, quad2.C, quad1Points)) {
        return false;
      }

      if (DoAxisSeparationTest(quad2.D, quad2.C, quad2.A, quad1Points)) {
        return false;
      }

      if (DoAxisSeparationTest(quad2.C, quad2.B, quad2.A, quad1Points)) {
        return false;
      }

      // If we found no separating axis, then the quadrilaterals intersect.
      return true;
    }
 public static bool CheckRectRectIntersection(Quadrilateral quad1, Rect quad2) {
   return CheckRectRectIntersection(quad1, new Quadrilateral(quad2));
 }
 /// <summary>
 /// Отжатие кнопки мыши
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void myCanvas_MouseUp(object sender, MouseButtonEventArgs e)
 {
     //Если флаг = true, то сохраняем все выделенные элементы в массив 
     //Флаг = false
     if (ZoomFlag)
     {
         ZoomFlag = false;
         IncStatus();
     }
     if (SelectingZone)
     {
         
         for (int i = 0; i < myCanvas.Children.Count; i++)
         {
             Rect rect = new Rect();
             rect.X = Canvas.GetLeft(myCanvas.Children[i]);
             rect.Y = Canvas.GetTop(myCanvas.Children[i]);
             rect.Width = myCanvas.Children[i].RenderSize.Width;
             rect.Height = myCanvas.Children[i].RenderSize.Height;
             Quadrilateral redQuad = new Quadrilateral(rect);
             rect.X = Canvas.GetLeft(selectedZone);
             rect.Y = Canvas.GetTop(selectedZone);
             rect.Width = selectedZone.Width;
             rect.Height = selectedZone.Height;
             Quadrilateral greenQuad = new Quadrilateral(rect);
             if (IntersectionTest.CheckRectRectIntersection(redQuad, greenQuad) && rect.Width > 0)
             {
                 SelectObject(myCanvas.Children[i]);
             }
         }
         SelectingZone = false;
         myCanvas.Children.Remove(selectedZone);
         
         
     }
     Mouse.Capture(null);
 }