コード例 #1
0
 /// <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;
     }
 }
コード例 #2
0
        /// <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);
            }
        }
コード例 #3
0
        /// <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);
        }