/// <summary> /// Draw circle on mouse click and enable mouse drag /// </summary> /// <param name="sender">sender object</param> /// <param name="e">event</param> private void pictureBoxMain_MouseDown(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) { int cX = e.X; int cY = e.Y; Random random = new Random(); int diameter = (int)(100 * random.NextDouble()) + 50; curCircle = new MCircle(diameter, new Point(cX, cY)); circles.Add(curCircle); curX = cX; curY = cY; curXX = e.X; curYY = e.Y; isDragging = true; } }
/// <summary> /// Support method for calculating motion of circles /// </summary> /// <param name="c">Circle object</param> /// <returns>Time elapsed, if 0 means no collision</returns> private double MotionCalc(MCircle c) { double timeElapsed = 0; Point tempDestination = Physics.DestinationPosition(c.V, c.a, INTERVAL, c.P); Vector collisionVector = Physics.BoundaryCollision(tempDestination, c.Diameter / 2, pictureBoxMain.Width, pictureBoxMain.Height); if (collisionVector.X == 0 && collisionVector.Y == 0) { c.P = new Point(tempDestination.X, tempDestination.Y); c.V = Physics.CalcVelocity(c.V, c.a, INTERVAL); c.a = Physics.CalcAcceleration(c.V, 100, c.Diameter / 2); return(timeElapsed); } else { if (collisionVector.X != 0) { timeElapsed = Physics.TimeElapsed(c.V.X, c.a.X, (int)collisionVector.X); c.P = Physics.DestinationPosition(c.V, c.a, timeElapsed, c.P); c.V = Physics.CalcVelocity(c.V, c.a, timeElapsed); c.V = new Velocity(-c.V.X, c.V.Y); c.a = Physics.CalcAcceleration(c.V, 100, c.Diameter / 2); c.P = Physics.DestinationPosition(c.V, c.a, INTERVAL - timeElapsed, c.P); } else { timeElapsed = Physics.TimeElapsed(c.V.Y, c.a.Y, (int)collisionVector.Y); c.P = Physics.DestinationPosition(c.V, c.a, timeElapsed, c.P); c.V = Physics.CalcVelocity(c.V, c.a, timeElapsed); c.V = new Velocity(c.V.X, -c.V.Y); c.a = Physics.CalcAcceleration(c.V, 100, c.Diameter / 2); c.P = Physics.DestinationPosition(c.V, c.a, INTERVAL - timeElapsed, c.P); } return(timeElapsed); } }
/// <summary> /// Generate circle on a specific spot /// </summary> /// <param name="sender">sender object</param> /// <param name="e">event</param> private void circleToolStripMenuItem_Click(object sender, EventArgs e) { MCircle circle = new MCircle(100, new Point(500, 200)); circles.Add(circle); }