Exemple #1
0
        private bool AreCocircular(Triangle.HalfEdge _edge)
        {
            var triA = _edge.Triangle;
            var triB = _edge.Twin.Triangle;

            var ccxChk = triA.CCX.ApproxEqual(triB.CCX, MinFloatingPointErr);
            var ccyChk = triA.CCY.ApproxEqual(triB.CCY, MinFloatingPointErr);
            var radChk = triA.CCRSq.ApproxEqual(triB.CCRSq, triA.CCRSq / 1000f);

            return(ccxChk && ccyChk && radChk);
        }
Exemple #2
0
        private bool SolveDegenerate(Triangle.HalfEdge _edge)
        {
            var pts = _edge.D.Points;
            var ab0 = pts[_edge.OriginIdx];
            var ab1 = pts[_edge.NextEdge.OriginIdx];
            var a2  = pts[_edge.NextEdge.NextEdge.OriginIdx];
            var b2  = pts[_edge.Twin.NextEdge.NextEdge.OriginIdx];

            var nab0 = RndLinXfrm(ab0);
            var nab1 = RndLinXfrm(ab1);
            var na2  = RndLinXfrm(a2);
            var nb2  = RndLinXfrm(b2);

            float tACCX, tACCY, tACCRSq, tBCCX, tBCCY, tBCCRSq;

            Geom.Circumcircle(nab0, nab1, na2, out tACCX, out tACCY, out tACCRSq);

            Geom.Circumcircle(nab1, nab0, nb2, out tBCCX, out tBCCY, out tBCCRSq);

            var a2toCCB = na2.SqrMagFast(tBCCX, tBCCY);
            var b2toCCA = nb2.SqrMagFast(tACCX, tACCY);

            return(a2toCCB >= tBCCRSq && b2toCCA >= tACCRSq);
        }