private static bool IsCubicChordMonotone(Point[] controlPoints, double squaredTolerance) { double num = GeometryHelper.SquaredDistance(controlPoints[0], controlPoints[3]); if (num <= squaredTolerance) { return(false); } Vector lhs = controlPoints[3].Subtract(controlPoints[0]); Vector rhs = controlPoints[1].Subtract(controlPoints[0]); double num2 = GeometryHelper.Dot(lhs, rhs); if ((num2 < 0.0) || (num2 > num)) { return(false); } Vector vector3 = controlPoints[2].Subtract(controlPoints[0]); double num3 = GeometryHelper.Dot(lhs, vector3); if ((num3 < 0.0) || (num3 > num)) { return(false); } if (num2 > num3) { return(false); } return(true); }
internal static void FlattenFigure(PathFigure figure, IList <Point> points, double tolerance, bool removeRepeat) { if (figure == null) { throw new ArgumentNullException(nameof(figure)); } if (points == null) { throw new ArgumentNullException(nameof(points)); } if (tolerance < 0.0) { throw new ArgumentOutOfRangeException(nameof(tolerance)); } var list = removeRepeat ? new List <Point>() : points; list.Add(figure.StartPoint); foreach (var data in figure.AllSegments()) { data.PathSegment.FlattenSegment(list, data.StartPoint, tolerance); } if (figure.IsClosed) { list.Add(figure.StartPoint); } if (removeRepeat && list.Count > 0) { points.Add(list[0]); for (var i = 1; i < list.Count; i++) { if (!MathHelper.IsVerySmall(GeometryHelper.SquaredDistance(points.Last(), list[i]))) { points.Add(list[i]); } } } }