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; }