private static int getSubStrokesRange(int subStrokeCount) { if (looseness == 1.0) { return(CharConstants.MAX_CHARACTER_SUB_STROKE_COUNT); } double y0 = subStrokeCount * 0.25; double ctrl1X = 0.4; double ctrl1Y = 1.5 * y0; double ctrl2X = 0.75; double ctrl2Y = 1.5 * ctrl1Y; CubicCurve2D curve = new CubicCurve2D(0, y0, ctrl1X, ctrl1Y, ctrl2X, ctrl2Y, 1, CharConstants.MAX_CHARACTER_SUB_STROKE_COUNT); double t = curve.GetFirstSolutionForX(looseness); return((int)Math.Round(curve.GetYOnCurve(t))); }
private static int getStrokesRange(int strokeCount) { if (looseness == 0.0) { return(0); } else if (looseness == 1.0) { return(CharConstants.MAX_CHARACTER_STROKE_COUNT); } double ctrl1X = 0.35; double ctrl1Y = strokeCount * 0.4; double ctrl2X = 0.6; double ctrl2Y = strokeCount; CubicCurve2D curve = new CubicCurve2D(0, 0, ctrl1X, ctrl1Y, ctrl2X, ctrl2Y, 1, CharConstants.MAX_CHARACTER_STROKE_COUNT); double t = curve.GetFirstSolutionForX(looseness); return((int)Math.Round(curve.GetYOnCurve(t))); }
private static double[] initCubicCurveScoreTable(CubicCurve2D curve, int numSamples) { double x1 = curve.X1; double x2 = curve.X2; double range = x2 - x1; double x = x1; double xInc = range / numSamples; double[] scoreTable = new double[numSamples]; double[] solutions = new double[1]; for (int i = 0; i < numSamples; i++) { double t = curve.GetFirstSolutionForX(Math.Min(x, x2)); scoreTable[i] = curve.GetYOnCurve(t); x += xInc; } return(scoreTable); }