OSDN Git Service

132132
[psychlops/silverlight.git] / dev4 / Pages / BinomialSolver.xaml.cs
index 84c26e8..1e1eb82 100644 (file)
@@ -15,6 +15,7 @@ namespace PsychlopsSilverlight4.Pages
 {\r
        public partial class BinomialSolver : ChildWindow\r
        {\r
+               System.Windows.Shapes.Line line;\r
                int func_selected;\r
                Psychlops.Solver.Constants.Func1 func1;\r
                Psychlops.Solver.Constants.Func2 func2;\r
@@ -56,6 +57,13 @@ namespace PsychlopsSilverlight4.Pages
 \r
                        chart1.DataContext = data;\r
                        solver = new Psychlops.Solver.BinomialLikelihood();\r
+                       line = new Line();\r
+                       line.X1 = 0;\r
+                       line.Y1 = 0;\r
+                       line.X2 = ChartCanvas.ActualWidth;\r
+                       line.Y2 = 0;\r
+                       ChartCanvas.Children.Add(line);\r
+                       OText.DataContext = OrdinateSlider;\r
                }\r
                public class Data\r
                {\r
@@ -204,10 +212,55 @@ namespace PsychlopsSilverlight4.Pages
                        this.UpdateLayout();\r
                }\r
 \r
-               private void AbscissaSlider_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)\r
+               private void RemoveConditionButton_Click(object sender, RoutedEventArgs e)\r
                {\r
-                       solver.champ[0] = AbscissaSlider.Value;\r
-                       reFunc();\r
+                       data.RemoveAt(data.Count-1);\r
+                       this.UpdateLayout();\r
+               }\r
+\r
+               private void OrdinateSlider_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)\r
+               {\r
+                       if (solver.champ[0] == 0.0) return;\r
+                       int dir = 1, pdir, dirr=0, ii = 0;\r
+                       double d = (maximum - minimum) * 0.25;\r
+                       double refval = OrdinateSlider.Value;\r
+                       double x1 = solver.champ[0], x2= x1 + d, v1, v2, tmp;\r
+                       switch (func_selected)\r
+                       {\r
+                               case 1:\r
+                                       break;\r
+                               case 2:\r
+                                       while (dirr < 32)\r
+                                       {\r
+                                               pdir = dir;\r
+                                               v1 = Math.Abs(refval - func2(x1, solver.champ[0], solver.champ[1]));\r
+                                               v2 = Math.Abs(refval - func2(x2, solver.champ[0], solver.champ[1]));\r
+                                               if (v1 > v2)\r
+                                               {\r
+                                                       tmp = x2;\r
+                                                       x1 = x2;\r
+                                                       x2 = tmp + d;\r
+                                                       dir = 1;\r
+                                               }\r
+                                               else\r
+                                               {\r
+                                                       tmp = x1;\r
+                                                       x2 = x1;\r
+                                                       x1 = tmp - d;\r
+                                                       dir = -1;\r
+                                               }\r
+                                               if (ii>32 || dir != pdir) { d /= 2; dirr++; ii = 0; }\r
+                                               ii++;\r
+                                       }\r
+                                       break;\r
+                               case 3:\r
+                                       break;\r
+                       }\r
+\r
+                       AbscissaSlider.Value = (x1+x2)/2.0;\r
+                       Parameter0.Text = AbscissaSlider.Value.ToString();\r
+                       line.Y1 = refval * 200;\r
+                       line.Y2 = refval * 200;\r
                }\r
 \r
        }\r