Exemplo n.º 1
0
        public static bool HasValidIntersectPoint(VEdge leftEdge, VEdge rightEdge)
        {
            if (leftEdge == null || rightEdge == null)
            {
                return(false);
            }

            if (leftEdge.m_lerp == rightEdge.m_lerp)
            {
                return(false);
            }

            Vector3 intersectPoint = GetIntersectPoint(leftEdge, rightEdge);

            bool valid = true;

            if (!leftEdge.IsInfinityLerp())
            {
                if (leftEdge.m_direction == Direction.Left)
                {
                    valid &= intersectPoint.x < leftEdge.StartPoint.x;
                }
                else
                {
                    valid &= intersectPoint.x > leftEdge.StartPoint.x;
                }
            }

            if (!rightEdge.IsInfinityLerp())
            {
                if (rightEdge.m_direction == Direction.Left)
                {
                    valid &= intersectPoint.x < rightEdge.StartPoint.x;
                }
                else
                {
                    valid &= intersectPoint.x > rightEdge.StartPoint.x;
                }
            }

            return(valid);
        }
Exemplo n.º 2
0
        public static Vector3 GetIntersectPoint(VEdge leftEdge, VEdge rightEdge)
        {
            Vector3 intersectPoint = Vector3.zero;

            if (leftEdge.IsInfinityLerp())
            {
                intersectPoint.x = leftEdge.StartPoint.x;
                intersectPoint.z = rightEdge.m_lerp * intersectPoint.x + rightEdge.m_intercept;
            }
            else if (rightEdge.IsInfinityLerp())
            {
                intersectPoint.x = rightEdge.StartPoint.x;
                intersectPoint.z = leftEdge.m_lerp * intersectPoint.x + leftEdge.m_intercept;
            }
            else
            {
                intersectPoint.x = (rightEdge.m_intercept - leftEdge.m_intercept) / (leftEdge.m_lerp - rightEdge.m_lerp);
                intersectPoint.z = leftEdge.m_lerp * intersectPoint.x + leftEdge.m_intercept;
            }

            return(intersectPoint);
        }