public static VCircleEvent CircleCheckDataNode(VDataNode n, double ys)
{
var l = LeftDataNode(n);
var r = RightDataNode(n);
if (l == null || r == null || l.DataPoint == r.DataPoint || l.DataPoint == n.DataPoint || n.DataPoint == r.DataPoint)
{
return(null);
}
if (MathTools.ccw(l.DataPoint[0], l.DataPoint[1], n.DataPoint[0], n.DataPoint[1], r.DataPoint[0], r.DataPoint[1], false) <= 0)
{
return(null);
}
var center = Fortune.CircumCircleCenter(l.DataPoint, n.DataPoint, r.DataPoint);
var vc = new VCircleEvent {
NodeN = n,
NodeL = l,
NodeR = r,
Center = center,
Valid = true
};
if (vc.Y > ys || Math.Abs(vc.Y - ys) < 1e-10)
{
return(vc);
}
return(null);
}