#javafx-8 #curve #variations #thickness
#javafx-8 #кривая #варианты #толщина
Вопрос:
Есть ли способ создать кривую в JavaFX с изменяющейся шириной штриха? Например, начиная с 10 точек и заканчивая 1 точкой.
Ответ №1:
Вы не можете изменять ширину штриха.
Однако вы можете имитировать это поведение, создав путь, который накладывает несколько кривых, которые начинаются с разных начальных позиций, но сходятся к одной точке.
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import javafx.scene.shape.*;
import javafx.stage.Stage;
import java.util.Random;
public class DividedPath extends Application {
private static final double WIDTH = 400, HEIGHT = 400;
private static final Random random = new Random(42);
@Override public void start(Stage stage) {
CubicCurve curve = randomCurve(WIDTH, HEIGHT);
Path path = new Path();
for (int i = -5; i <= 5; i ) {
path.getElements().addAll(
new MoveTo(curve.getStartX() i, curve.getStartY()),
new CubicCurveTo(
curve.getControlX1(),
curve.getControlY1(),
curve.getControlX2(),
curve.getControlY2(),
curve.getEndX(),
curve.getEndY()
)
);
}
path.setStroke(Color.FORESTGREEN);
Group root = new Group();
curve.setFill(null);
root.getChildren().addAll(
path,
curve
);
Scene scene = new Scene(
root,
WIDTH, HEIGHT,
Color.rgb(35,39,50)
);
stage.setScene(scene);
stage.setResizable(false);
stage.show();
}
private CubicCurve randomCurve(double mx, double my) {
return new CubicCurve(
random.nextDouble() * mx,
random.nextDouble() * my,
random.nextDouble() * mx,
random.nextDouble() * my,
random.nextDouble() * mx,
random.nextDouble() * my,
random.nextDouble() * mx,
random.nextDouble() * my
);
}
}