public LineRectIntersection(Line2D line, Rectangle2D rect) { final Point2D p1 = new Point2D.Double(rect.getMinX(), rect.getMinY()); final Point2D p2 = new Point2D.Double(rect.getMaxX(), rect.getMinY()); final Point2D p3 = new Point2D.Double(rect.getMaxX(), rect.getMaxY()); final Point2D p4 = new Point2D.Double(rect.getMinX(), rect.getMaxY()); final Point2D inter1 = new LineSegmentIntersection(new Line2D.Double(p1, p2), line).getIntersection(); final Point2D inter2 = new LineSegmentIntersection(new Line2D.Double(p2, p3), line).getIntersection(); final Point2D inter3 = new LineSegmentIntersection(new Line2D.Double(p3, p4), line).getIntersection(); final Point2D inter4 = new LineSegmentIntersection(new Line2D.Double(p4, p1), line).getIntersection(); final Point2D o = line.getP1(); inter = getCloser(o, inter1, inter2, inter3, inter4); }
public DotPath getRacordIn(Rectangle2D rect, Line2D tangeante) { // Log.println("rect x=" + rect.getX() + " y=" + rect.getY() + " w=" + rect.getWidth() + " h=" // + rect.getHeight()); // Log.println("tangeante (" + tangeante.getX1() + "," + tangeante.getY1() + ") (" + tangeante.getX2() // + "," + tangeante.getY2() + ")"); final DotPath result = new DotPath(); // final Point2D inter = BezierUtils.intersect((Line2D.Double) // tangeante, rect); Point2D inter = new LineRectIntersection(tangeante, rect).getIntersection(); // Log.println("inter=" + inter); if (inter == null) { final Point2D p1 = new Point2D.Double(rect.getMinX(), rect.getMinY()); final Point2D p2 = new Point2D.Double(rect.getMaxX(), rect.getMinY()); final Point2D p3 = new Point2D.Double(rect.getMaxX(), rect.getMaxY()); final Point2D p4 = new Point2D.Double(rect.getMinX(), rect.getMaxY()); inter = LineRectIntersection.getCloser(tangeante.getP1(), p1, p2, p3, p4); } final CubicCurve2D.Double curv = new CubicCurve2D.Double(tangeante.getX1(), tangeante.getY1(), tangeante.getX1(), tangeante.getY1(), inter.getX(), inter.getY(), inter.getX(), inter.getY()); return result.addAfter(curv); }
public static String toString(Line2D line) { // return line.getP1() + "-" + line.getP2(); return toString(line.getP1()) + "-" + toString(line.getP2()); }
public DotPath getRacordIn(Rectangle2D rect, Line2D tangeante) { final DotPath result = new DotPath(); final Point2D center = new Point2D.Double(rect.getCenterX(), rect.getCenterY()); final Line2D.Double line = new Line2D.Double(tangeante.getP1(), center); final Point2D inter = BezierUtils.intersect(line, rect); final CubicCurve2D.Double curv = new CubicCurve2D.Double(line.getX1(), line.getY1(), line.getX1(), line.getY1(), inter.getX(), inter.getY(), inter.getX(), inter.getY()); return result.addAfter(curv); }
final double getMindist(Point2D.Double pt) { double result = Double.MAX_VALUE; for (Point2D p : points.keySet()) { if (pt.equals(p)) { continue; } final double v = p.distance(pt); if (v < 1E-4) { throw new IllegalStateException(); } result = Math.min(result, v); } for (Line2D line : lines) { if (line.getP1().equals(pt) || line.getP2().equals(pt)) { continue; } final double v = line.ptSegDist(pt); if (result < 1E-4) { throw new IllegalStateException("pt=" + pt + " line=" + GeomUtils.toString(line)); } result = Math.min(result, v); } if (result == 0) { throw new IllegalStateException(); } // Log.println("getMindist=" + result); return result; } }
public DotPath getRacordIn(Rectangle2D rect, Line2D tangeante) { final DotPath result = new DotPath(); final Point2D center = new Point2D.Double(rect.getCenterX(), rect.getCenterY()); final Line2D.Double line = new Line2D.Double(tangeante.getP1(), center); final Point2D inter = BezierUtils.intersect(line, rect); final CubicCurve2D.Double curv = new CubicCurve2D.Double(tangeante.getX1(), tangeante.getY1(), tangeante .getX2(), tangeante.getY2(), tangeante.getX2(), tangeante.getY2(), inter.getX(), inter.getY()); return result.addAfter(curv); }
public static boolean linesOrientation(Collection<Line2D> segments){ //Algorithm for a lineString-Orientation (clockwise or counterclockwise) //is the value of result > 0 the Orientation of the lineString is clockwise //is the value of result < 0 the Orientation of the lineString is counterclockwise ArrayList<Point2D> points = new ArrayList<Point2D>(segments.size()+1); for (Iterator<Line2D> it = segments.iterator(); it.hasNext();) { Line2D edge = it.next(); points.add(((Line2D)it.next()).getP1()); } return AlgoPoint2D.pointsOrientation(points).booleanValue(); }
/** * Modify vector stopping point. * * @param pt new stopping point */ public void extendTo (Point pt) { line.setLine(line.getP1(), pt); }
/** * Report the baseline defined by the provided sequence of items. * * @param items provided sequence * @return baseline from first to last */ public static Line2D baselineOf (List<? extends TextBasedItem> items) { Point2D first = items.get(0).getBaseline().getP1(); Point2D last = items.get(items.size() - 1).getBaseline().getP2(); return new Line2D.Double(first, last); }
public LineRectIntersection(Line2D line, Rectangle2D rect) { final Point2D p1 = new Point2D.Double(rect.getMinX(), rect.getMinY()); final Point2D p2 = new Point2D.Double(rect.getMaxX(), rect.getMinY()); final Point2D p3 = new Point2D.Double(rect.getMaxX(), rect.getMaxY()); final Point2D p4 = new Point2D.Double(rect.getMinX(), rect.getMaxY()); final Point2D inter1 = new LineSegmentIntersection(new Line2D.Double(p1, p2), line).getIntersection(); final Point2D inter2 = new LineSegmentIntersection(new Line2D.Double(p2, p3), line).getIntersection(); final Point2D inter3 = new LineSegmentIntersection(new Line2D.Double(p3, p4), line).getIntersection(); final Point2D inter4 = new LineSegmentIntersection(new Line2D.Double(p4, p1), line).getIntersection(); final Point2D o = line.getP1(); inter = getCloser(o, inter1, inter2, inter3, inter4); }
/** * Return the bisector (French: médiatrice) of the provided segment * * @param segment the provided segment * @return (a segment on) the bisector */ public static Line2D bisector (Line2D segment) { return bisector(segment.getP1(), segment.getP2()); }
/** * Report the theoretical black area for the beam item * * @return parallelogram for black pixels */ public Area getCoreArea () { return AreaUtil.horizontalParallelogram(median.getP1(), median.getP2(), height); }
/** * Returns: * 0 if it is not the same segment, i.e !equal AND !inverted * 1 if it is equal, i.e. pa0.equals(pb0) && pa1.equals(pb1) * 2 if it is inverted, i.e. pa0.equals(pb1) && pa1.equals(pb0) * @return */ public static int sameSegment(Line2D line,Point2D pb0, Point2D pb1) { return sameSegment(line.getP1(), line.getP2(), pb0, pb1); }
Line2DFacade (Line2D line) { Objects.requireNonNull(line, "Cannot create Line2DFacade with a null line"); p1 = new Point2DFacade(line.getP1()); p2 = new Point2DFacade(line.getP2()); }
public static double getAngle2D(Line2D line, Point2D point) { // * p1 // / // / // / // *------>* // (0,0) this return AlgoPoint2D.getAngle2D(AlgoPoint2D.subtract(line.getP2(),line.getP1()), point); } }
public static String toString(Line2D line) { // return line.getP1() + "-" + line.getP2(); return toString(line.getP1()) + "-" + toString(line.getP2()); }
@Override public Point2D getEndVector (boolean reverse) { int dir = reverse ? (-1) : 1; Line2D l = line.toDouble(); double length = l.getP1().distance(l.getP2()); return new Point2D.Double( (dir * (l.getX2() - l.getX1())) / length, (dir * (l.getY2() - l.getY1())) / length); }
public DotPath getRacordIn(Rectangle2D rect, Line2D tangeante) { final DotPath result = new DotPath(); final Point2D center = new Point2D.Double(rect.getCenterX(), rect.getCenterY()); final Line2D.Double line = new Line2D.Double(tangeante.getP1(), center); final Point2D inter = BezierUtils.intersect(line, rect); final CubicCurve2D.Double curv = new CubicCurve2D.Double(tangeante.getX1(), tangeante.getY1(), tangeante .getX2(), tangeante.getY2(), tangeante.getX2(), tangeante.getY2(), inter.getX(), inter.getY()); return result.addAfter(curv); }
/** * */ protected void computeArea () { setArea(AreaUtil.horizontalParallelogram(median.getP1(), median.getP2(), height)); // Define precise bounds based on this path setBounds(getArea().getBounds()); }