예제 #1
0
        /// <summary>
        /// Draw cylinders on tape with canvas element
        /// </summary>
        /// <param name="tape"></param>
        /// <param name="rondelica"></param>
        /// <param name="selectedPattern"></param>
        private void Draw(Tape tape, Rondelica rondelica, string selectedPattern)
        {
            log.Info("Draw(Tape tape, Rondelica rondelica, bool recPattern) called");

            Canvas1.Children.Clear();

            int maxNumber = 0;

            if (selectedPattern == "Rectangle")
            {
                maxNumber = tape.GetPositionsOfCylindersRecPattern(rondelica).Count;
            }
            else if (selectedPattern == "Triangle")
            {
                maxNumber = tape.GetPositionsOfCylindersTriangularPattern(rondelica).Count;
            }
            // check which pattern is better
            else
            {
                int recPatternNr      = tape.GetPositionsOfCylindersRecPattern(rondelica).Count;
                int trianglePatternNr = tape.GetPositionsOfCylindersTriangularPattern(rondelica).Count;

                if (recPatternNr > trianglePatternNr)
                {
                    maxNumber = tape.GetPositionsOfCylindersRecPattern(rondelica).Count;
                }
                else
                {
                    maxNumber = tape.GetPositionsOfCylindersTriangularPattern(rondelica).Count;
                }
            }

            Rectangle rectangle = new Rectangle
            {
                Width  = tape.Length,
                Height = tape.Width,
                Stroke = Brushes.Black
            };

            Canvas1.Children.Add(rectangle);

            for (int i = 0; i < tape.ListOfCylinders.Count; i++)
            {
                Ellipse ellipse = new Ellipse
                {
                    Height = tape.ListOfCylinders[i].Radius * 2,
                    Width  = tape.ListOfCylinders[i].Radius * 2,
                    Stroke = Brushes.Black
                };

                Canvas.SetLeft(ellipse, tape.ListOfCylinders[i].Position.X - tape.ListOfCylinders[i].Radius);
                Canvas.SetTop(ellipse, tape.ListOfCylinders[i].Position.Y - tape.ListOfCylinders[i].Radius);

                Canvas1.Children.Add(ellipse);
            }

            Max1.Content = "Število rondelic: " + maxNumber.ToString();
        }
        public string GetPositionsOfCylindersTriangularPattern(int length, int width, int radius, int minDistC2C, int minDistC2Edge)
        {
            Tape      tape      = new Tape(length, width);
            Rondelica rondelica = new Rondelica(radius, minDistC2C, minDistC2Edge, new Point());

            return(JsonConvert.SerializeObject(tape.GetPositionsOfCylindersTriangularPattern(rondelica)));
        }
예제 #3
0
        public void TrianglePatternRandomInputMultipleTests()
        {
            int numberOfTests = 10000;

            for (int i = 0; i < numberOfTests; i++)
            {
                Random rnd = new Random();

                int radius        = rnd.Next(1000);
                int minDistC2C    = rnd.Next(200);
                int minDistC2Edge = rnd.Next(200);
                int length        = rnd.Next(10000);
                int width         = rnd.Next(10000);

                Tape tape = new Tape(length, width);

                Rondelica rondelica = new Rondelica(radius, minDistC2C, minDistC2Edge, new Point());
                int       actual    = tape.GetPositionsOfCylindersTriangularPattern(rondelica).Count;
                int       expected  = tape.MaxNumberOfCylindersTriangularPattern(rondelica);

                string output = "radius: " + radius + ", minDistC2C: " + minDistC2C
                                + ", minDistC2Edge: " + minDistC2Edge + ", length: " + length + ", width: " + width;

                Assert.AreEqual(expected, actual, output);
            }
        }
예제 #4
0
        static void Main(string[] args)
        {
            int radius        = 1;
            int minDistC2C    = 0;
            int minDistC2Edge = 0;
            int length        = 13;
            int width         = 13;

            /*int radius = 100;
            *  int minDistC2C = 0;
            *  int minDistC2Edge = 0;
            *  int length = 2000;
            *  int width = 1000;*/

            Tape tape = new Tape(length, width);

            Rondelica rondelica = new Rondelica(radius, minDistC2C, minDistC2Edge, new Point());
            int       a         = tape.GetPositionsOfCylindersRecPattern(rondelica).Count;

            Console.WriteLine(a);

            int b = tape.MaxNumberOfCylindersRecPattern(rondelica);

            Console.WriteLine(b);

            Console.WriteLine("----------------");

            int c = tape.GetPositionsOfCylindersTriangularPattern(rondelica).Count;
            int d = tape.MaxNumberOfCylindersTriangularPattern(rondelica);

            Console.WriteLine(c + " " + d);

            Console.Read();
        }
예제 #5
0
        public void TrianglePatternNoSpacing()
        {
            int radius        = 100;
            int minDistC2C    = 0;
            int minDistC2Edge = 0;
            int length        = 2000;
            int width         = 1000;

            Tape tape = new Tape(length, width);

            Rondelica rondelica = new Rondelica(radius, minDistC2C, minDistC2Edge, new Point());
            int       actual    = tape.GetPositionsOfCylindersTriangularPattern(rondelica).Count;
            int       expected  = tape.MaxNumberOfCylindersTriangularPattern(rondelica);

            Assert.AreEqual(expected, actual);
        }