コード例 #1
0
ファイル: Utility.cs プロジェクト: GPopov/Navigator
        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;
        }
コード例 #2
0
ファイル: Utility.cs プロジェクト: GPopov/Navigator
        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);
        }
コード例 #3
0
ファイル: MainWindow.xaml.cs プロジェクト: GPopov/Navigator
        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();
        }