コード例 #1
0
        private bool SegmentIntersectsEdge(Vector2 p1, Vector2 p2, int ignoreIndex, ref Vector2 point, out int intersectingEdgeIndex)
        {
            intersectingEdgeIndex = -1;

            float sqrDistance = float.MaxValue;

            for (int i = 0; i < m_SpriteMeshData.edges.Count; i++)
            {
                Edge    edge     = m_SpriteMeshData.edges[i];
                Vector2 v1       = m_SpriteMeshData.GetPosition(edge.index1);
                Vector2 v2       = m_SpriteMeshData.GetPosition(edge.index2);
                Vector2 pointTmp = Vector2.zero;

                if (!edge.Contains(ignoreIndex) && MathUtility.SegmentIntersection(p1, p2, v1, v2, ref pointTmp))
                {
                    float sqrMagnitude = (pointTmp - p1).sqrMagnitude;
                    if (sqrMagnitude < sqrDistance)
                    {
                        sqrDistance           = sqrMagnitude;
                        intersectingEdgeIndex = i;
                        point = pointTmp;
                    }
                }
            }

            return(intersectingEdgeIndex != -1);
        }
コード例 #2
0
        public bool FindEdgesContainsIndex(int index, out List <Edge> result)
        {
            Debug.Assert(spriteMeshData != null);

            bool found = false;

            result = new List <Edge>();

            for (int i = 0; i < spriteMeshData.edges.Count; ++i)
            {
                Edge edge = spriteMeshData.edges[i];

                if (edge.Contains(index))
                {
                    found = true;
                    result.Add(edge);
                }
            }

            return(found);
        }