private Point2d interpolate(Point2d startPoint, Point2d endPoint, double x) { double startX = startPoint.getX(); double endX = endPoint.getX(); double startY = startPoint.getY(); double endY = endPoint.getY(); double percentX = (x - startX) / (endX - startX); double y = startY + percentX * (endY - startY); return new Point2d(x, y); }
public void calculateArea() { Point2d forwardVector = new Point2d(nextVertexData.position); forwardVector.sub(position); Point2d backwardsVector = new Point2d(previousVertexData.position); backwardsVector.sub(position); area = Math.abs(forwardVector.getX() * backwardsVector.getY() - forwardVector.getY() * backwardsVector.getX()); } }
private GeneralPath createRoundBracket(Point2d p1, Point2d p2, Vector2d perp, Point2d midpoint) { Path2D path = new Path2D.Double(); // bracket 1 (cp: control point) path.moveTo(p1.x + perp.x, p1.y + perp.y); Point2d cpb1 = new Point2d(midpoint); cpb1.add(VecmathUtil.negate(perp)); path.quadTo(cpb1.x, cpb1.y, p2.x + perp.x, p2.y + perp.y); return GeneralPath.outlineOf(path, stroke, foreground); }
public double getEccentricity() { Point2d edgePoint = findEdgePoint(getX(), getY()); return Math.max(1e-3, distance(origin) / edgePoint.distance(origin)); }
/** * returns true if this boxes maximum point y value <= referenceY */ public boolean isBoxAtOrBelow(double referenceY) { return (maxPoint.getY() <= referenceY); }
public Point2d[] findMinMaxPoints(double x) { for (Point2d[] minMaxPoint : minMaxPoints) { if (Math.abs(x - minMaxPoint[0].getX()) < 1e-7) return minMaxPoint; } return null; }
/** * Translates the given polygon. */ public static void translatePolygon(Tuple2d translation, ConvexPolygon2d polygon) { for (int i = 0; i < polygon.getNumberOfVertices(); i++) { Point2d vertex = polygon.getVertex(i); vertex.add(translation); } }
/** * After calling this method, the polygon has no vertex, area, or centroid. * Note that calling that method doesn't generate garbage. */ public void clear() { numberOfVertices = 0; area = Double.NaN; centroid.set(Double.NaN, Double.NaN); isUpToDate = false; }