aboutsummaryrefslogtreecommitdiffstats
path: root/src/java/org/apache/fop/afp/util/CubicBezierApproximator.java
diff options
context:
space:
mode:
authorGlenn Adams <gadams@apache.org>2016-03-03 09:49:26 +0000
committerGlenn Adams <gadams@apache.org>2016-03-03 09:49:26 +0000
commitc8cde713f54ca731f4a7f3bfaef8af9e8a1b9262 (patch)
treef553e13b28bd90fd2067bf390509f9290260d330 /src/java/org/apache/fop/afp/util/CubicBezierApproximator.java
parent82804d6ffcb68841cd7adf9740469f3a79c372c8 (diff)
downloadxmlgraphics-fop-c8cde713f54ca731f4a7f3bfaef8af9e8a1b9262.tar.gz
xmlgraphics-fop-c8cde713f54ca731f4a7f3bfaef8af9e8a1b9262.zip
Transition source to standard maven hierarchy (initial).
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/branches/maven@1733433 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'src/java/org/apache/fop/afp/util/CubicBezierApproximator.java')
-rw-r--r--src/java/org/apache/fop/afp/util/CubicBezierApproximator.java129
1 files changed, 0 insertions, 129 deletions
diff --git a/src/java/org/apache/fop/afp/util/CubicBezierApproximator.java b/src/java/org/apache/fop/afp/util/CubicBezierApproximator.java
deleted file mode 100644
index e5980c3dd..000000000
--- a/src/java/org/apache/fop/afp/util/CubicBezierApproximator.java
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/* $Id$ */
-
-package org.apache.fop.afp.util;
-
-import java.awt.geom.Point2D;
-import java.awt.geom.Point2D.Double;
-
-/**
- * This class can be used to convert a cubic bezier curve within
- * a path into multiple quadratic bezier curves which will approximate
- * the original cubic curve.
- * The various techniques are described here:
- * http://www.timotheegroleau.com/Flash/articles/cubic_bezier_in_flash.htm
- */
-public final class CubicBezierApproximator {
-
- private CubicBezierApproximator() {
- }
-
- /**
- * This method will take in an array containing the x and y coordinates of the four control
- * points that describe the cubic bezier curve to be approximated using the fixed mid point
- * approximation. The curve will be approximated using four quadratic bezier curves the points
- * for which will be returned in a two dimensional array, with each array within that containing
- * the points for a single quadratic curve. The returned data will not include the start point
- * for any of the curves; the first point passed in to this method should already have been
- * set as the current position and will be the assumed start of the first curve.
- *
- * @param cubicControlPointCoords an array containing the x and y coordinates of the
- * four control points.
- * @return an array of arrays containing the x and y coordinates of the quadratic curves
- * that approximate the original supplied cubic bezier curve.
- */
- public static double[][] fixedMidPointApproximation(double[] cubicControlPointCoords) {
- if (cubicControlPointCoords.length < 8) {
- throw new IllegalArgumentException("Must have at least 8 coordinates");
- }
-
- //extract point objects from source array
- Point2D p0 = new Point2D.Double(cubicControlPointCoords[0], cubicControlPointCoords[1]);
- Point2D p1 = new Point2D.Double(cubicControlPointCoords[2], cubicControlPointCoords[3]);
- Point2D p2 = new Point2D.Double(cubicControlPointCoords[4], cubicControlPointCoords[5]);
- Point2D p3 = new Point2D.Double(cubicControlPointCoords[6], cubicControlPointCoords[7]);
-
- //calculates the useful base points
- Point2D pa = getPointOnSegment(p0, p1, 3.0 / 4.0);
- Point2D pb = getPointOnSegment(p3, p2, 3.0 / 4.0);
-
- //get 1/16 of the [P3, P0] segment
- double dx = (p3.getX() - p0.getX()) / 16.0;
- double dy = (p3.getY() - p0.getY()) / 16.0;
-
- //calculates control point 1
- Point2D pc1 = getPointOnSegment(p0, p1, 3.0 / 8.0);
-
- //calculates control point 2
- Point2D pc2 = getPointOnSegment(pa, pb, 3.0 / 8.0);
- pc2 = movePoint(pc2, -dx, -dy);
-
- //calculates control point 3
- Point2D pc3 = getPointOnSegment(pb, pa, 3.0 / 8.0);
- pc3 = movePoint(pc3, dx, dy);
-
- //calculates control point 4
- Point2D pc4 = getPointOnSegment(p3, p2, 3.0 / 8.0);
-
- //calculates the 3 anchor points
- Point2D pa1 = getMidPoint(pc1, pc2);
- Point2D pa2 = getMidPoint(pa, pb);
- Point2D pa3 = getMidPoint(pc3, pc4);
-
- //return the points for the four quadratic curves
- return new double[][] {
- {pc1.getX(), pc1.getY(), pa1.getX(), pa1.getY()},
- {pc2.getX(), pc2.getY(), pa2.getX(), pa2.getY()},
- {pc3.getX(), pc3.getY(), pa3.getX(), pa3.getY()},
- {pc4.getX(), pc4.getY(), p3.getX(), p3.getY()}};
- }
-
- private static Double movePoint(Point2D point, double dx, double dy) {
- return new Point2D.Double(point.getX() + dx, point.getY() + dy);
- }
-
- /**
- * This method will calculate the coordinates of a point half way along a segment [P0, P1]
- *
- * @param p0 - The point describing the start of the segment.
- * @param p1 - The point describing the end of the segment.
- * @return a Point object describing the coordinates of the calculated point on the segment.
- */
- private static Point2D getMidPoint(Point2D p0, Point2D p1) {
- return getPointOnSegment(p0, p1, 0.5);
- }
-
- /**
- * This method will calculate the coordinates of a point on a segment [P0, P1]
- * whose distance along the segment [P0, P1] from P0, is the given ratio
- * of the length the [P0, P1] segment.
- *
- * @param p0 The point describing the start of the segment.
- * @param p1 The point describing the end of the segment.
- * @param ratio The distance of the point being calculated from P0 as a ratio of
- * the segment length.
- * @return a Point object describing the coordinates of the calculated point on the segment.
- */
- private static Point2D getPointOnSegment(Point2D p0, Point2D p1, double ratio) {
- double x = p0.getX() + ((p1.getX() - p0.getX()) * ratio);
- double y = p0.getY() + ((p1.getY() - p0.getY()) * ratio);
- return new Point2D.Double(x, y);
- }
-
-}