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); }
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); }