Exemplo n.º 1
0
        private void createAnswers()
        {
            tb_Ball3.Text = "0";
            clearGroupEffect(firstTask);
            clearGroupEffect(secondTask);
            clearSelection(firstTask);
            clearSelection(secondTask);

            alignCenter();
            double[] dat = new double[2];
            if (!AnimationBuilder.modelingFirstCollision(element) && isDataFormed)
            {
                MessageBox.Show("Некоректні дані. Зіткнення не відбудеться.", "Некоректні дані", MessageBoxButton.OK, MessageBoxImage.Information);
                createData();
                return;
            }
            dat[0] = Round(element.FirstBall.Speed / Data.dataScale * element.FirstBall.Mass, 2);
            dat[1] = Round(element.SecondBall.Speed / Data.dataScale * element.SecondBall.Mass, 2);


            double        t1   = 0;
            List <double> used = new List <double>();

            firstTask[0].Content = (dat[0]).ToString();
            used.Add(dat[0]);
            for (int i = 1; i < firstTask.Length; i++)
            {
                t1 = used[0];
                while (used.Contains(t1))
                {
                    t1 = (r.NextDouble() >= 0.5) ?  Round(dat[0] + r.Next((int)Data.dataScale, 5 * (int)Data.dataScale) / Data.dataScale, 2) :  Round(Abs(dat[0] - r.Next((int)Data.dataScale, 5 * (int)Data.dataScale) / Data.dataScale), 2);
                }

                firstTask[i].Content = t1.ToString();
                used.Add(t1);
            }
            sortGroup(firstTask);
            used.Clear();

            secondTask[0].Content = (dat[1]).ToString();
            used.Add(dat[1]);
            for (int i = 1; i < firstTask.Length; i++)
            {
                t1 = used[0];
                while (used.Contains(t1))
                {
                    t1 = (r.NextDouble() >= 0.5) ? Round(dat[1] + r.Next((int)Data.dataScale, 5 * (int)Data.dataScale) / Data.dataScale, 2) : Round(Abs(dat[1] - r.Next((int)Data.dataScale, 5 * (int)Data.dataScale) / Data.dataScale), 2);
                }

                secondTask[i].Content = t1.ToString();
                used.Add(t1);
            }
            sortGroup(secondTask);

            loadElement();
            alignCollision();
        }
        private void startStoryboard()
        {
            reloadElements();
            btn_Start_Pause.Content = "Пауза";
            btn_Start_Pause.ToolTip = "Поставити на паузу анімацію";
            btn_Stop.IsEnabled      = true;
            btn_ToStart.IsEnabled   = true;
            btn_ToEnd.IsEnabled     = true;
            slider.IsEnabled        = true;
            Storyboard sb = new Storyboard();

            firstCollisionTime = double.MaxValue;
            double sliderMax = -1;
            double temp      = 0;

            foreach (Element el in elements)
            {
                sb   = new Storyboard();
                temp = AnimationBuilder.createAnimation(el, chb_Guides.IsChecked.Value) / el.SpeedAnimation;
                if (temp < firstCollisionTime)
                {
                    firstCollisionTime = temp;
                }
                sb.Children.Add(el.FirstBall.animationX);
                sb.Children.Add(el.FirstBall.animationY);
                sb.Children.Add(el.SecondBall.animationX);
                sb.Children.Add(el.SecondBall.animationY);
                sb.Children.Add(el.GuidesAppearance);
                sb.SpeedRatio = el.SpeedAnimation;
                storyboard.Children.Add(sb);
                //Можна брати час будь-якої анімації кулі, оскільки вони однакові
                temp = el.FirstBall.animationX.KeyFrames.Count - 1;
                temp = (el.FirstBall.animationX.KeyFrames[(int)temp].KeyTime.TimeSpan.Milliseconds + el.FirstBall.animationX.KeyFrames[(int)temp].KeyTime.TimeSpan.Seconds * 1000 + el.FirstBall.animationX.KeyFrames[(int)temp].KeyTime.TimeSpan.Minutes * 60000) / el.SpeedAnimation;
                if (temp > sliderMax)
                {
                    sliderMax = temp;
                }
            }
            storyboard.Begin(this, true);
            storyboard.SetSpeedRatio(this, slider_SpeedRatio.Value);
            slider.Maximum = sliderMax;//після попередніх двох строк!
            isCollised     = false;
        }