Пример #1
0
 public static POINTI ToPointC(this XY point)
 {
     return(POINTI.Ceiling(point.ToPoint()));
 }
Пример #2
0
 public static POINTI ToPointR(this XY point)
 {
     return(POINTI.Round(point.ToPoint()));
 }
Пример #3
0
        /// <summary>
        /// sets up the SpringGrid springs and points so that it can be drawn
        /// </summary>
        /// <param name="gridSize"></param>
        /// <param name="spacing"></param>
        public void SetGridSizeAndSpacing(Rectangle gridSize, System.Numerics.Vector2 spacing)
        {
            _gridSize = gridSize;
            var springList = new List <Spring>();

            // we offset the gridSize location by half-spacing so the padding is applied evenly all around
            gridSize.Location -= spacing.ToPoint();
            gridSize.Width    += (int)spacing.X;
            gridSize.Height   += (int)spacing.Y;

            var numColumns = (int)(gridSize.Width / spacing.X) + 1;
            var numRows    = (int)(gridSize.Height / spacing.Y) + 1;

            _points = new PointMass[numColumns, numRows];

            // these fixed points will be used to anchor the grid to fixed positions on the screen
            var fixedPoints = new PointMass[numColumns, numRows];

            // create the point masses
            int column = 0, row = 0;

            for (float y = gridSize.Top; y <= gridSize.Bottom; y += spacing.Y)
            {
                for (float x = gridSize.Left; x <= gridSize.Right; x += spacing.X)
                {
                    _points[column, row]     = new PointMass(new System.Numerics.Vector3(x, y, 0), 1);
                    fixedPoints[column, row] = new PointMass(new System.Numerics.Vector3(x, y, 0), 0);
                    column++;
                }

                row++;
                column = 0;
            }

            // link the point masses with springs
            for (var y = 0; y < numRows; y++)
            {
                for (var x = 0; x < numColumns; x++)
                {
                    if (x == 0 || y == 0 || x == numColumns - 1 || y == numRows - 1)                     // anchor the border of the grid
                    {
                        springList.Add(new Spring(fixedPoints[x, y], _points[x, y], 0.1f, 0.1f));
                    }
                    else if (x % 3 == 0 && y % 3 == 0)                     // loosely anchor 1/9th of the point masses
                    {
                        springList.Add(new Spring(fixedPoints[x, y], _points[x, y], 0.002f, 0.02f));
                    }

                    const float stiffness = 0.28f;
                    const float damping   = 0.06f;

                    if (x > 0)
                    {
                        springList.Add(new Spring(_points[x - 1, y], _points[x, y], stiffness, damping));
                    }
                    if (y > 0)
                    {
                        springList.Add(new Spring(_points[x, y - 1], _points[x, y], stiffness, damping));
                    }
                }
            }

            _springs = springList.ToArray();
        }
Пример #4
0
 public static POINTI ToPointT(this XY point)
 {
     return(POINTI.Truncate(point.ToPoint()));
 }
Пример #5
0
 public static void Translate(ref Rectangle rect, System.Numerics.Vector2 vec)
 {
     rect.Location += vec.ToPoint();
 }