Danmaku_no_Kyojin.Collisions.CollisionConvexPolygon.Project C# (CSharp) Method

Project() private method

private Project ( Vector2 axis ) : Vector2
axis Vector2
return Vector2
        private Vector2 Project(Vector2 axis)
        {
            if (Vertices.Count == 0)
                return Vector2.Zero;

            float min = Vector2.Dot(new Vector2(GetWorldPosition(Vertices[0]).X, GetWorldPosition(Vertices[0]).Y), axis);
            float max = min;
            for (int i = 1; i < Vertices.Count; i++)
            {
                // NOTE: the axis must be normalized to get accurate projections
                float p = Vector2.Dot(new Vector2(GetWorldPosition(Vertices[i]).X, GetWorldPosition(Vertices[i]).Y), axis);
                if (p < min)
                {
                    min = p;
                }
                else if (p > max)
                {
                    max = p;
                }
            }

            return new Vector2(min, max);
        }

Usage Example

示例#1
0
        private bool Intersects(CollisionConvexPolygon element)
        {
            // Loop over the axes of this polygon
            for (var i = 0; i < _axes.Count; i++)
            {
                var axis = _axes[i];

                // Project both shapes onto the axis
                var p1 = Project(axis);
                var p2 = element.Project(axis);

                // Do the projections overlap?
                if (!Overlap(p1, p2))
                {
                    // Then we can guarantee that the shapes do not overlap
                    return(false);
                }
            }

            // Loop over element polygon's axes
            List <Vector2> axes = element.GetAxes();

            for (int i = 0; i < axes.Count; i++)
            {
                Vector2 axis = axes[i];

                // Project both shapes onto the axis
                Vector2 p1 = Project(axis);
                Vector2 p2 = element.Project(axis);

                // Do the projections overlap?
                if (!Overlap(p1, p2))
                {
                    // Then we can guarantee that the shapes do not overlap
                    return(false);
                }
            }

            // If we get here then we know that every axis had overlap on it
            // so we can guarantee an intersection
            return(true);
        }
All Usage Examples Of Danmaku_no_Kyojin.Collisions.CollisionConvexPolygon::Project