Пример #1
0
        static bool TryGetDisturbance(Edge *tri, float2 r1, float2 r2, float2 c, out float2 e, out float2 u, out Vertex *v, bool lhs)
        {
            var next = tri->RNext;

            v = next->Org;
            var vert = next->Org->Point; // using v causes burst error
            var p    = tri->Org->Point;

            if (Math.TriContains(r1, r2, c, vert))
            {
                if (lhs)
                {
                    u = tri->Dest->Point;
                    e = tri->Org->Point;
                }
                else
                {
                    u = tri->Org->Point;
                    e = tri->Dest->Point;
                }

                return(true);
            }

            if (!next->Constrained && Math.IntersectSegSeg(p, vert, c, r2))
            {
                return(TryGetDisturbance(next->Sym, r1, r2, c, out e, out u, out v, lhs));
            }

            next = next->RNext;
            p    = tri->Dest->Point;

            if (!next->Constrained && Math.IntersectSegSeg(p, vert, r1, r2))
            {
                return(TryGetDisturbance(next->Sym, r1, r2, c, out e, out u, out v, lhs));
            }

            e = default;
            u = default;
            v = default;
            return(false);
        }