コード例 #1
0
ファイル: Physics.cs プロジェクト: Zixxy/Graphen
 public static Point CalculateCurrentCirclePosition(int secondsBefore, int milisecondsBefore, Circle c)
 {
     DateTime now = DateTime.Now;
     double timeElapsed;
     if (now.Second != secondsBefore)
     {
         timeElapsed =  (now.Millisecond + 1000 - milisecondsBefore);
     }
     else
     {
         timeElapsed =  (now.Millisecond - milisecondsBefore);
     }
     return c.Position + c.StrengthVector * timeElapsed * speedOfMoving;
 }
コード例 #2
0
ファイル: Physics.cs プロジェクト: Zixxy/Graphen
 public static Vector CalculateForceVector(Circle c, ICollection<Circle> circles)
 {
     Vector resultantForce = new Vector();
     foreach(Circle i in circles)
     {
         double distance = Circle.CountDistance(i, c);
         if (repelRange >= distance && distance != 0)
         {
             Vector v = new Vector(c.Position.X - i.Position.X, c.Position.Y - i.Position.Y);
             resultantForce += (v * 1 / distance); // inverserly to distance.
         }
     }
      //   System.Diagnostics.Debug.WriteLine("accidental strength "+accidentalStrength);
     return resultantForce;
 }
コード例 #3
0
ファイル: VertexDrawer.cs プロジェクト: Zixxy/Graphen
        public static Circle CreateVertex(Point position, DrawingState state)
        {
            Circle circle = new Circle(position);
            state.controller.AddVertex(circle);
            Ellipse ellipse = circle.ellipse;

            ellipse.MouseDown += (object a, MouseButtonEventArgs b) =>
            {
                if (state.currentTool == DrawingState.Tool.DRAW_EDGE)
                {
                    if (state.firstCircle == null)
                        state.firstCircle = circle;
                    else if (state.secondCircle != null)
                        state.firstCircle = circle;
                    else
                        state.secondCircle = circle;
                }
                else
                {
                    state.firstCircle = state.secondCircle = null;
                }
            };
            //TODO - choose hover effect, do when styling
            ellipse.MouseEnter += (object o, MouseEventArgs e) =>
            {
                if (state.currentTool == DrawingState.Tool.DRAW_EDGE)
                {
                    ellipse.Fill = new SolidColorBrush(Color.FromRgb(0, 0, 0));
                }
            };
            ellipse.MouseLeave += (object o, MouseEventArgs e) =>
            {
                ellipse.Fill = new SolidColorBrush(Color.FromArgb(255, 0, 150, 0));
            };

            state.canvas.Children.Add(ellipse);
            return circle;
        }
コード例 #4
0
ファイル: Circle.cs プロジェクト: Zixxy/Graphen
 public static bool DetectColision(Circle a, Circle b)
 {
     var r1 = a.ellipse.Width/2;
     var r2 = b.ellipse.Width/2;
     return CountDistance(a, b) < r1 + r2;
 }
コード例 #5
0
ファイル: Circle.cs プロジェクト: Zixxy/Graphen
 public static double CountDistance(Circle a, Circle b)
 {
     return Math.Sqrt((a.Position.X - b.Position.X) * (a.Position.X - b.Position.X) +
         (a.Position.Y - b.Position.Y) * (a.Position.Y - b.Position.Y));
 }
コード例 #6
0
ファイル: MainWindow.xaml.cs プロジェクト: Zixxy/Graphen
 public void RestoreEdge(Circle one, Circle two)
 {
     state.firstCircle = one;
     state.secondCircle = two;
     LineDrawer.CreateEdge(state);
 }
コード例 #7
0
ファイル: Physics.cs プロジェクト: Zixxy/Graphen
 public static void UpdateForceVector(Circle c, ICollection<Circle> circles)
 {
     c.StrengthVector = CalculateForceVector(c, circles);
 }
コード例 #8
0
ファイル: Physics.cs プロジェクト: Zixxy/Graphen
 public static void UpdateCurrentCirclePosition(int secondsBefore, int milisecondsBefore, Circle c)
 {
     c.Position = CalculateCurrentCirclePosition(secondsBefore, milisecondsBefore, c);
 }