예제 #1
0
        private void onCalculateClick(object sender, RoutedEventArgs e)
        {
            tb_output.Text = "";
            canvas.Children.Clear();
            canvas.Visibility = Visibility.Visible;

            int circleRadius;
            int borderDistance;
            int circleDistance;
            int height;

            try
            {
                circleRadius   = Convert.ToInt32(tb_radius.Text);
                borderDistance = Convert.ToInt32(tb_border_distance.Text);
                circleDistance = Convert.ToInt32(tb_circle_distance.Text);
                height         = Convert.ToInt32(tb_height.Text);
            }
            catch (Exception ex)
            {
                tb_output.Text = ex.Message;
                return;
            }

            if (height > PackingCircles.width)
            {
                tb_output.Text = "Width has to be greater than height for optimal solution.";
                return;
            }


            canvas.Width  = PackingCircles.width;
            canvas.Height = height;

            List <PackingCircles.Circle> circles;

            try
            {
                circles = PackingCircles.Calculate(
                    circleRadius,
                    circleDistance,
                    borderDistance,
                    height);
            } catch (Exception ex) {
                tb_output.Text = ex.Message;
                return;
            }

            tb_output.Text += "Number of circles: " + circles.Count.ToString() + "\n";
            tb_output.Text += "Coordinates:\n";

            foreach (PackingCircles.Circle c in circles)
            {
                Ellipse ellipse = createEllipse(c, height);

                tb_output.Text += c.ToString() + "\n";

                canvas.Children.Add(ellipse);
            }
        }
예제 #2
0
        public void TestIsSpaceTrue()
        {
            int[] radius = { 10, 0, 5, 100, 20, 40, 50 };
            int   y      = 300;

            PackingCircles.borderDistance = 50;

            PointF[] circleCenter =
            {
                new PointF(60,   60),
                new PointF(450, 250),
                new PointF(445,  65),
                new PointF(150, 150),
                new PointF(430, 230),
                new PointF(410, 210),
                new PointF(400, 200)
            };

            for (int i = 0; i < radius.Length; i++)
            {
                PackingCircles.radius = radius[i];
                PackingCircles.distanceBetweenCircles = 0;
                PackingCircles.height = y;

                PackingCircles.Circle circle = new PackingCircles.Circle(
                    PackingCircles.radius,
                    PackingCircles.distanceBetweenCircles,
                    circleCenter[i]);

                bool result = PackingCircles.IsSpace(circle);

                Assert.IsTrue(result);
            }
        }
예제 #3
0
        public void TestIsSpaceFalse()
        {
            int[] radius = { 10, 0, 5, 100, 20, 40, 50 };
            int   y      = 300;

            PointF[] circleCenter =
            {
                new PointF(0,     0),
                new PointF(501, 301),
                new PointF(496,  15),
                new PointF(120, 220),
                new PointF(480, 300),
                new PointF(460, 261),
                new PointF(510, 250)
            };

            for (int i = 0; i < radius.Length; i++)
            {
                PackingCircles.radius = radius[i];
                PackingCircles.distanceBetweenCircles = 0;
                PackingCircles.height = y;

                PackingCircles.Circle circle = new PackingCircles.Circle(
                    PackingCircles.radius,
                    PackingCircles.distanceBetweenCircles,
                    circleCenter[i]);

                bool result = PackingCircles.IsSpace(circle);

                Assert.IsFalse(result);
            }
        }
예제 #4
0
        public void TestGetTriangleHeightFloat()
        {
            float distanceFloat = 10.60F;

            double result = PackingCircles.GetTriangleHeight(distanceFloat);

            Assert.IsNotNull(result);
            Assert.AreEqual(9, result);
        }
예제 #5
0
        public void TestGetTriangleHeightInt()
        {
            int distanceInt = 10;

            double result = PackingCircles.GetTriangleHeight(distanceInt);

            Assert.IsNotNull(result);
            Assert.AreEqual(8, result);
        }
예제 #6
0
        public void TestGetNextCircleFirstRowFirstCircleNoSpace()
        {
            PackingCircles.radius = 380;
            PackingCircles.distanceBetweenCircles = 0;
            PackingCircles.height         = 400;
            PackingCircles.borderDistance = 50;

            PackingCircles.Circle result = PackingCircles.GetNextCircle(null);

            Assert.IsNull(result);
        }
예제 #7
0
        public void TestGetTriangleHeightDoubleNegativeAndZero()
        {
            double negativeDistance = -10;
            double zeroDistance     = 0;

            double resultNegative = PackingCircles.GetTriangleHeight(negativeDistance);
            double resultZero     = PackingCircles.GetTriangleHeight(zeroDistance);

            Assert.IsNotNull(resultNegative);
            Assert.IsNotNull(resultZero);

            Assert.AreEqual(0, resultNegative);
            Assert.AreEqual(0, resultZero);
        }
예제 #8
0
        public void TestGetNextCircleFirstRowFirstCircleHasSpace()
        {
            PackingCircles.radius = 10;
            PackingCircles.distanceBetweenCircles = 0;
            PackingCircles.height         = 400;
            PackingCircles.borderDistance = 50;

            PackingCircles.Circle expected = new PackingCircles.Circle(
                PackingCircles.radius = 10,
                PackingCircles.distanceBetweenCircles = 0,
                new PointF(60, 60));

            PackingCircles.Circle result = PackingCircles.GetNextCircle(null);

            Assert.AreEqual(expected, result);
        }