public static bool Contains(Circle c, Square s) { double d1 = SqDist(c.Center, new Point(s.Center.X + s.Size / 2, s.Center.Y + s.Size / 2)); double d2 = SqDist(c.Center, new Point(s.Center.X + s.Size / 2, s.Center.Y - s.Size / 2)); double d3 = SqDist(c.Center, new Point(s.Center.X - s.Size / 2, s.Center.Y + s.Size / 2)); double d4 = SqDist(c.Center, new Point(s.Center.X - s.Size / 2, s.Center.Y - s.Size / 2)); double sqr = c.Radius * c.Radius; return d1 < sqr && d2 < sqr && d3 < sqr && d4 < sqr; }
public static bool Intersects(Square s, Circle c) { double distanceX = Math.Abs(s.Center.X - c.Center.X); double distanceY = Math.Abs(s.Center.Y - c.Center.Y); double sHalfSize = s.Size / 2.0; if (distanceX > c.Radius + sHalfSize || distanceY > c.Radius + sHalfSize) { return false; } if (distanceX < sHalfSize || distanceY < sHalfSize) { return true; } double cornerDistanceSq = Math.Pow((distanceX - sHalfSize), 2) + Math.Pow((distanceY - sHalfSize), 2); return cornerDistanceSq <= Math.Pow(c.Radius, 2); }
private void canvas_MouseDown(object sender, MouseButtonEventArgs e) { double size = 512; Circle c = new Circle(size, e.GetPosition(canvas)); Ellipse el = new Ellipse(); el.Width = c.Radius * 2; el.Height = c.Radius * 2; el.Fill = Brushes.Salmon; Canvas.SetLeft(el, c.Center.X - el.Width / 2); Canvas.SetTop(el, c.Center.Y - el.Height / 2); canvas.Children.Add(el); quadTree.InsertObject(e.GetPosition(canvas), size, 1); DrawTree(); }