Ejemplo n.º 1
0
        // 多边形是否包含点
        public bool contains(Vector2 point)
        {
            int n = vertices.Count;

            if (n < 3)
            {
                return(false);
            }

            // 先计算出内部的方向
            int innerSide = SAT.whitchSide(vertices[0], vertices[1], vertices[2]);

            // 通过判断点是否均在三条边的内侧,来判定单形体是否包含点
            for (int i = 0; i < n; ++i)
            {
                int iNext = (i + 1) % n;
                int side  = SAT.whitchSide(vertices[i], vertices[iNext], point);

                if (side * innerSide < 0) // 在外部
                {
                    return(false);
                }
            }

            return(true);
        }