diff options
Diffstat (limited to 'src/main/java/com/pau101/util/BezierUtils.java')
| -rwxr-xr-x | src/main/java/com/pau101/util/BezierUtils.java | 42 |
1 files changed, 24 insertions, 18 deletions
diff --git a/src/main/java/com/pau101/util/BezierUtils.java b/src/main/java/com/pau101/util/BezierUtils.java index bdaca5c..27b82d5 100755 --- a/src/main/java/com/pau101/util/BezierUtils.java +++ b/src/main/java/com/pau101/util/BezierUtils.java @@ -11,11 +11,11 @@ public final class BezierUtils { * Compute the value of all nth degree Bernstein polynomials. * * @param curveDegree - * : degree of curve + * : degree of curve * @param t - * : curve parameter on interval [0,1] + * : curve parameter on interval [0,1] * @param scalars - * : curveDegree + 1 Bernstein values. + * : curveDegree + 1 Bernstein values. */ public static void allBernstein(int curveDegree, float t, float scalars[]) { @@ -38,13 +38,13 @@ public final class BezierUtils { * Compute point of nth degree Bezier curve. * * @param controlPoints - * : curveDegree + 1 control points + * : curveDegree + 1 control points * @param curveDegree - * : degree of curve + * : degree of curve * @param t - * : curve parameter on interval [0,1] + * : curve parameter on interval [0,1] * @param point - * : resulting point + * : resulting point */ public static void pointOnBezierCurve(float controlPoints[][], int curveDegree, float t, float point[]) { @@ -60,20 +60,24 @@ public final class BezierUtils { } /** - * Compute an approximate length of a Bezier curve given the control - * points. + * Compute an approximate length of a Bezier curve given the + * control points. * * @param controlPoints - * : control points of a Bezier curve + * : control points of a Bezier curve * @return the approximate length */ public static float approximateLength(float controlPoints[][]) { float length = 0; for (int i = 0; i < controlPoints.length - 1; i++) { - float xDif = controlPoints[i + 1][0] - controlPoints[i][0]; - float yDif = controlPoints[i + 1][1] - controlPoints[i][1]; - float zDif = controlPoints[i + 1][2] - controlPoints[i][2]; - length += Math.sqrt(xDif * xDif + yDif * yDif + zDif * zDif); + float xDif = controlPoints[i + 1][0] + - controlPoints[i][0]; + float yDif = controlPoints[i + 1][1] + - controlPoints[i][1]; + float zDif = controlPoints[i + 1][2] + - controlPoints[i][2]; + length += Math.sqrt(xDif * xDif + yDif * yDif + + zDif * zDif); } return length; } @@ -82,22 +86,24 @@ public final class BezierUtils { float scale) { float noLessThan = 10 * scale; float segs = length * scale / 30F; - return (int) Math.ceil( - Math.sqrt(segs * segs * 0.6 + noLessThan * noLessThan)); + return (int) Math.ceil(Math.sqrt(segs * segs * 0.6 + + noLessThan * noLessThan)); } public static float[][] curve(float controlPoints[][]) { return curve(controlPoints, 1); } - public static float[][] curve(float controlPoints[][], float scale) { + public static float[][] curve(float controlPoints[][], + float scale) { int count = tesselationSegementsForLength( approximateLength(controlPoints), scale); float[][] points = new float[count][3]; for (int i = 0; i < count; i++) { float t = i / (float) (count - 1); float[] point = new float[3]; - pointOnBezierCurve(controlPoints, controlPoints.length - 1, t, + pointOnBezierCurve(controlPoints, + controlPoints.length - 1, t, point); points[i] = point; } |
