private void cutAllCubic(List<CubicCurve2D.Double> all) { final List<CubicCurve2D.Double> tmp = new ArrayList<CubicCurve2D.Double>(all); all.clear(); for (CubicCurve2D.Double bez : tmp) { final CubicCurve2D.Double left = new CubicCurve2D.Double(); final CubicCurve2D.Double right = new CubicCurve2D.Double(); bez.subdivide(left, right); all.add(left); all.add(right); } }
private DotPath manageRect(Rectangle2D start, Rectangle2D end) { final List<CubicCurve2D.Double> list = new ArrayList<CubicCurve2D.Double>(this.beziers); while (true) { if (BezierUtils.isCutting(list.get(0), start) == false) { throw new IllegalStateException(); } if (BezierUtils.dist(list.get(0)) <= 1.0) { break; } final CubicCurve2D.Double left = new CubicCurve2D.Double(); final CubicCurve2D.Double right = new CubicCurve2D.Double(); list.get(0).subdivide(left, right); list.set(0, left); list.add(1, right); if (BezierUtils.isCutting(list.get(1), start)) { list.remove(0); } } return new DotPath(list); }
private void addCurve(CubicCurve2D.Double peace) { final Rectangle2D bounds = peace.getBounds2D(); final double flat = peace.getFlatness(); if (flat < 10) { lines.add(new Line2D.Double(peace.getP1(), peace.getP2())); lenght += Math.sqrt(bounds.getWidth() * bounds.getWidth() + bounds.getHeight() * bounds.getHeight()); return; } final CubicCurve2D.Double left = new CubicCurve2D.Double(); final CubicCurve2D.Double right = new CubicCurve2D.Double(); peace.subdivide(left, right); addCurve(left); addCurve(right); }
current.subdivide(part1, part2); assert part1.getP2().equals(part2.getP1()); if (clusterPosition.contains(part1.getP2())) {
public PointAndAngle getMiddle() { Point2D result = null; double angle = 0; for (CubicCurve2D.Double bez : beziers) { final CubicCurve2D.Double left = new CubicCurve2D.Double(); final CubicCurve2D.Double right = new CubicCurve2D.Double(); bez.subdivide(left, right); final Point2D p1 = left.getP1(); final Point2D p2 = left.getP2(); final Point2D p3 = right.getP1(); final Point2D p4 = right.getP2(); if (result == null || getCost(p1) < getCost(result)) { result = p1; angle = BezierUtils.getStartingAngle(left); } if (getCost(p2) < getCost(result)) { result = p2; angle = BezierUtils.getEndingAngle(left); } if (getCost(p3) < getCost(result)) { result = p3; angle = BezierUtils.getStartingAngle(right); } if (getCost(p4) < getCost(result)) { result = p4; angle = BezierUtils.getEndingAngle(right); } } return new PointAndAngle(result, angle); }
public PointDirected getIntersection(CubicCurve2D.Double bez) { if (contains(bez.x1, bez.y1) == contains(bez.x2, bez.y2)) { return null; } final double dist = bez.getP1().distance(bez.getP2()); if (dist < 2) { final double angle = BezierUtils.getStartingAngle(bez); return new PointDirected(bez.getP1(), angle); } final CubicCurve2D.Double left = new CubicCurve2D.Double(); final CubicCurve2D.Double right = new CubicCurve2D.Double(); bez.subdivide(left, right); final PointDirected int1 = getIntersection(left); if (int1 != null) { return int1; } final PointDirected int2 = getIntersection(right); if (int2 != null) { return int2; } throw new IllegalStateException(); }
private DotPath manageRect(Rectangle2D start, Rectangle2D end) { final List<CubicCurve2D.Double> list = new ArrayList<CubicCurve2D.Double>(this.beziers); while (true) { if (BezierUtils.isCutting(list.get(0), start) == false) { throw new IllegalStateException(); } if (BezierUtils.dist(list.get(0)) <= 1.0) { break; } final CubicCurve2D.Double left = new CubicCurve2D.Double(); final CubicCurve2D.Double right = new CubicCurve2D.Double(); list.get(0).subdivide(left, right); list.set(0, left); list.add(1, right); if (BezierUtils.isCutting(list.get(1), start)) { list.remove(0); } } return new DotPath(list); }
private void addCurve(CubicCurve2D.Double peace) { final Rectangle2D bounds = peace.getBounds2D(); final double flat = peace.getFlatness(); if (flat < 10) { lines.add(new Line2D.Double(peace.getP1(), peace.getP2())); lenght += Math.sqrt(bounds.getWidth() * bounds.getWidth() + bounds.getHeight() * bounds.getHeight()); return; } final CubicCurve2D.Double left = new CubicCurve2D.Double(); final CubicCurve2D.Double right = new CubicCurve2D.Double(); peace.subdivide(left, right); addCurve(left); addCurve(right); }
/**Splits a cubic Bézier curve in half. * @param c A cubic Bézier curve to be divided * @return an array with the left and right cubic Bézier subcurves * */ CubicCurve2D.Double[] cBezSplit(CubicCurve2D.Double c) { CubicCurve2D.Double[] cc = new CubicCurve2D.Double[2]; for (int i=0; i<2 ; i++) cc[i] = new CubicCurve2D.Double(); c.subdivide(cc[0],cc[1]); return cc; }
public Map<Point2D, Double> somePoints() { final Map<Point2D, Double> result = new HashMap<Point2D, Double>(); for (CubicCurve2D.Double bez : beziers) { final CubicCurve2D.Double left = new CubicCurve2D.Double(); final CubicCurve2D.Double right = new CubicCurve2D.Double(); bez.subdivide(left, right); result.put(left.getP1(), BezierUtils.getStartingAngle(left)); result.put(left.getP2(), BezierUtils.getEndingAngle(left)); result.put(right.getP1(), BezierUtils.getStartingAngle(right)); result.put(right.getP2(), BezierUtils.getEndingAngle(right)); } return result; }
private void drawCubic(double x, double y, CubicCurve2D.Double bez) { drawPointInternal(x, y, bez.getP1()); drawPointInternal(x, y, bez.getP2()); if (bez.getP1().distance(bez.getP2()) > quanta) { final CubicCurve2D.Double part1 = new CubicCurve2D.Double(); final CubicCurve2D.Double part2 = new CubicCurve2D.Double(); bez.subdivide(part1, part2); drawCubic(x, y, part1); drawCubic(x, y, part2); } }
private void cutAllCubic(List<CubicCurve2D.Double> all) { final List<CubicCurve2D.Double> tmp = new ArrayList<CubicCurve2D.Double>(all); all.clear(); for (CubicCurve2D.Double bez : tmp) { final CubicCurve2D.Double left = new CubicCurve2D.Double(); final CubicCurve2D.Double right = new CubicCurve2D.Double(); bez.subdivide(left, right); all.add(left); all.add(right); } }
/**Splits a cubic Bézier curve in half. * @param c A cubic Bézier curve to be divided * @return an array with the left and right cubic Bézier subcurves * */ CubicCurve2D.Double[] cBezSplit(CubicCurve2D.Double c) { CubicCurve2D.Double[] cc = new CubicCurve2D.Double[2]; for (int i=0; i<2 ; i++) cc[i] = new CubicCurve2D.Double(); c.subdivide(cc[0],cc[1]); return cc; }
current.subdivide(part1, part2); assert part1.getP2().equals(part2.getP1()); if (clusterPosition.contains(part1.getP2())) {
public PointAndAngle getMiddle() { Point2D result = null; double angle = 0; for (CubicCurve2D.Double bez : beziers) { final CubicCurve2D.Double left = new CubicCurve2D.Double(); final CubicCurve2D.Double right = new CubicCurve2D.Double(); bez.subdivide(left, right); final Point2D p1 = left.getP1(); final Point2D p2 = left.getP2(); final Point2D p3 = right.getP1(); final Point2D p4 = right.getP2(); if (result == null || getCost(p1) < getCost(result)) { result = p1; angle = BezierUtils.getStartingAngle(left); } if (getCost(p2) < getCost(result)) { result = p2; angle = BezierUtils.getEndingAngle(left); } if (getCost(p3) < getCost(result)) { result = p3; angle = BezierUtils.getStartingAngle(right); } if (getCost(p4) < getCost(result)) { result = p4; angle = BezierUtils.getEndingAngle(right); } } return new PointAndAngle(result, angle); }
public PointDirected getIntersection(CubicCurve2D.Double bez) { if (contains(bez.x1, bez.y1) == contains(bez.x2, bez.y2)) { return null; } final double dist = bez.getP1().distance(bez.getP2()); if (dist < 2) { final double angle = BezierUtils.getStartingAngle(bez); return new PointDirected(bez.getP1(), angle); } final CubicCurve2D.Double left = new CubicCurve2D.Double(); final CubicCurve2D.Double right = new CubicCurve2D.Double(); bez.subdivide(left, right); final PointDirected int1 = getIntersection(left); if (int1 != null) { return int1; } final PointDirected int2 = getIntersection(right); if (int2 != null) { return int2; } throw new IllegalStateException(); }
public Map<Point2D, Double> somePoints() { final Map<Point2D, Double> result = new HashMap<Point2D, Double>(); for (CubicCurve2D.Double bez : beziers) { final CubicCurve2D.Double left = new CubicCurve2D.Double(); final CubicCurve2D.Double right = new CubicCurve2D.Double(); bez.subdivide(left, right); result.put(left.getP1(), BezierUtils.getStartingAngle(left)); result.put(left.getP2(), BezierUtils.getEndingAngle(left)); result.put(right.getP1(), BezierUtils.getStartingAngle(right)); result.put(right.getP2(), BezierUtils.getEndingAngle(right)); } return result; }
private void drawCubic(double x, double y, CubicCurve2D.Double bez) { drawPointInternal(x, y, bez.getP1()); drawPointInternal(x, y, bez.getP2()); if (bez.getP1().distance(bez.getP2()) > quanta) { final CubicCurve2D.Double part1 = new CubicCurve2D.Double(); final CubicCurve2D.Double part2 = new CubicCurve2D.Double(); bez.subdivide(part1, part2); drawCubic(x, y, part1); drawCubic(x, y, part2); } }