Exemple #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);
        }
        void Update()
        {
            if (!inputData.colliderA || !inputData.colliderB)
            {
                return;
            }

            lineTool.BeginDraw();

            UpdateSelection();
            UpdateShape();

            isCollision = SAT.queryCollision(shapes[0], shapes[1]);

            DrawAxis();
            DrawShapes();

            lineTool.EndDraw();
        }