private Point2D makeControlPoint(final double endX, final double endY, final Circle circle, final int numSegments, int direction) { final double controlPointDistance = (4.0 / 3.0) * Math.tan(Math.PI / (2 * numSegments)) * circle.getRadius(); final Point2D center = new Point2D(circle.getCenterX(), circle.getCenterY()); final Point2D end = new Point2D(endX, endY); Point2D perp = rotate(center, end, direction * Math.PI / 2.); Point2D diff = perp.subtract(end); diff = diff.normalize(); diff = scale(diff, controlPointDistance); return end.add(diff); }
Point2D p1 = segmentPoints.get(i); Point2D p2 = segmentPoints.get(i + 1); Point2D tangent = p2.subtract(p0).normalize(); Point2D q0 = p1.subtract(tangent.multiply(scale * p1.subtract(p0).magnitude())); Point2D q1 = p1.add(tangent.multiply(scale * p2.subtract(p1).magnitude()));
/** * @param position the point to move towards * @param distance the distance to move */ public void translateTowards(Point2D position, double distance) { translate(position.subtract(getX(), getY()).normalize().multiply(distance)); }
private Point2D makeControlPoint(final double endX, final double endY, final Circle circle, final int numSegments, int direction) { final double controlPointDistance = (4.0 / 3.0) * Math.tan(Math.PI / (2 * numSegments)) * circle.getRadius(); final Point2D center = new Point2D(circle.getCenterX(), circle.getCenterY()); final Point2D end = new Point2D(endX, endY); Point2D perp = rotate(center, end, direction * Math.PI / 2.); Point2D diff = perp.subtract(end); diff = diff.normalize(); diff = scale(diff, controlPointDistance); return end.add(diff); }
protected Node createMenuBodyGameMenu() { double midY = app.getHeight() / 2; double distance = midY - 50; Button btnContinue = createActionButton("RESUME", this::fireResume); Button btn1 = createActionButton("SAVE", this::fireSave); Button btn2 = createContentButton("LOAD", this::createContentLoad); Button btn3 = createContentButton("OPTIONS", () -> new MenuContent(makeOptionsMenu())); Button btn4 = createContentButton("EXTRA", () -> new MenuContent(makeExtraMenu())); Button btn5 = createActionButton("MAIN MENU", this::fireExitToMainMenu); Group group = new Group(btnContinue, btn1, btn2, btn3, btn4, btn5); double dtheta = Math.PI / (group.getChildren().size() - 1); double angle = Math.PI / 2; int i = 0; for (Node n : group.getChildren()) { Point2D vector = new Point2D(Math.cos(angle), -Math.sin(angle)) .normalize() .multiply(distance) .add(0, midY); n.setTranslateX(vector.getX() - (i == 0 || i == 5 ? 0 : 100)); n.setTranslateY(vector.getY()); angle -= dtheta; i++; } return group; }
.normalize() .multiply(distance) .add(0, midY);