static public IEnumerable <Triangle2> RecursiveSplitAlongEdgeByArea(this Triangle2 item, float p, float min_area, int max_recursions) { if (item.GetArea() > min_area && max_recursions >= 1) { return(item.SplitAlongEdge01ByPercent(p) .Convert(t => t.RecursiveSplitAlongEdgeByArea(p, min_area, max_recursions - 1)) .Flatten()); } return(item.WrapAsEnumerable()); }
static public IEnumerable <Triangle2> SplitAlongEdgeByPercent(this Triangle2 item, float percent) { percent = percent.GetLooped(3.0f); if (percent < 1.0f) { return(item.SplitAlongEdge01ByPercent(percent)); } if (percent < 2.0f) { return(item.SplitAlongEdge12ByPercent(percent - 1.0f)); } return(item.SplitAlongEdge20ByPercent(percent - 2.0f)); }