public static Point2D.Double pointBetween(Point2D.Double p, Point2D.Double p2, double pos) { Point2D.Double n = new Point2D.Double( p.getX() * (1 - pos) + p2.getX() * (pos), p.getY() * (1 - pos) + p2.getY() * (pos)); return n; }
public static int closest(Point2D.Double[] BTS, Point2D.Double p) { double[] dist = new double[BTS.length]; int min = 0; for (int i = 0; i < BTS.length; i++) { dist[i] = distanceSq(BTS[i].getX(), BTS[i].getY(), p.getX(), p.getY()); if (dist[i] < dist[min]) min = i; } // System.out.println(dist[min] + " " + min); return min; }
/** * Method to get the coordinates of the enclosing rectangle after this transformation is applied * to the current picture * * @return the enclosing rectangle */ public Rectangle2D getTransformEnclosingRect(AffineTransform trans) { int width = getWidth(); int height = getHeight(); double maxX = width - 1; double maxY = height - 1; double minX, minY; Point2D.Double p1 = new Point2D.Double(0, 0); Point2D.Double p2 = new Point2D.Double(maxX, 0); Point2D.Double p3 = new Point2D.Double(maxX, maxY); Point2D.Double p4 = new Point2D.Double(0, maxY); Point2D.Double result = new Point2D.Double(0, 0); Rectangle2D.Double rect = null; // get the new points and min x and y and max x and y trans.deltaTransform(p1, result); minX = result.getX(); maxX = result.getX(); minY = result.getY(); maxY = result.getY(); trans.deltaTransform(p2, result); minX = Math.min(minX, result.getX()); maxX = Math.max(maxX, result.getX()); minY = Math.min(minY, result.getY()); maxY = Math.max(maxY, result.getY()); trans.deltaTransform(p3, result); minX = Math.min(minX, result.getX()); maxX = Math.max(maxX, result.getX()); minY = Math.min(minY, result.getY()); maxY = Math.max(maxY, result.getY()); trans.deltaTransform(p4, result); minX = Math.min(minX, result.getX()); maxX = Math.max(maxX, result.getX()); minY = Math.min(minY, result.getY()); maxY = Math.max(maxY, result.getY()); // create the bounding rectangle to return rect = new Rectangle2D.Double(minX, minY, maxX - minX + 1, maxY - minY + 1); return rect; }
/** * Write the given text string in the current font, centered at <location>. * * @param location the Point at the center of the text * @param s the text */ public static void text(Point2D.Double location, String s) { text(location.getX(), location.getY(), s); }
/** * Draw a filled rectangle of given half width and half height, centred at <location> and rotated * by d degrees. * * @param location the Point at the centre of the rectangle * @param halfWidth is half the width of the rectangle * @param halfHeight is half the height of the rectangle * @param degrees is the rotation of the rectangle with 3 o'clock being 0 degrees and 12 o'clock * being 270 degrees * @throws RuntimeException if halfWidth or halfHeight is negative */ public static void filledAngledRectangle( Point2D.Double location, double halfWidth, double halfHeight, double degrees) { filledAngledRectangle(location.getX(), location.getY(), halfWidth, halfHeight, degrees); }
/** * Draw a filled diamond of side length 2r, centred at <location>. * * @param location the Point at the centre of the square * @param r radius is half the length of any side of the diamond * @throws RuntimeException if r is negative */ public static void filledDiamond(Point2D.Double location, double r) { filledDiamond(location.getX(), location.getY(), r); }
/** * Draw a filled square of side length 2r, centred at <location>. * * @param location the Point at the centre of the square * @param r radius is half the length of any side of the square * @throws RuntimeException if r is negative */ public static void filledSquare(Point2D.Double location, double r) { filledSquare(location.getX(), location.getY(), r); }
/** * Draw a circle of radius r, centred at <location>. * * @param location the Point at the centre of the circle * @param r the radius of the circle * @throws RuntimeException if the radius of the circle is negative */ public static void circle(Point2D.Double location, double r) { circle(location.getX(), location.getY(), r); }