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); }
private IList <double> ComputeAngles() { _angles = new double[Count]; for (var i = 1; i < Count - 1; i++) { _angles[i] = -GeometryHelper.Dot(Normals[i - 1], Normals[i]); } if (IsClosed) { var num2 = -GeometryHelper.Dot(Normals[0], Normals[Count - 2]); _angles[0] = _angles[Count - 1] = num2; } else { _angles[0] = _angles[Count - 1] = 1.0; } return(_angles); }
private static void GetArcAngle(Point ptStart, Point ptEnd, bool fLargeArc, bool fSweepUp, out double rCosArcAngle, out double rSinArcAngle, out int cPieces) { rCosArcAngle = GeometryHelper.Dot(ptStart, ptEnd); rSinArcAngle = GeometryHelper.Determinant(ptStart, ptEnd); if (rCosArcAngle >= 0.0) { if (!fLargeArc) { cPieces = 1; return; } cPieces = 4; } else if (fLargeArc) { cPieces = 3; } else { cPieces = 2; } var d = Math.Atan2(rSinArcAngle, rCosArcAngle); if (fSweepUp) { if (d < 0.0) { d += 6.2831853071795862; } } else if (d > 0.0) { d -= 6.2831853071795862; } d /= cPieces; rCosArcAngle = Math.Cos(d); rSinArcAngle = Math.Sin(d); }