1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
| package test;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.chart.LineChart;
import javafx.scene.chart.NumberAxis;
import javafx.scene.chart.XYChart;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
import java.util.function.Function;
public final class Main extends Application {
public static void main(String... args) {
launch(args);
}
@Override
public void start(Stage stage) throws Exception {
final var chart1 = createChart(-5, 5, 0.25, x -> 1d / x);
final var chart2 = createChartGap(-5, 5, 0.25, x -> 1d / x);
final var root = new VBox();
root.getChildren().addAll(chart1, chart2);
final var scene = new Scene(root);
stage.setWidth(1200);
stage.setHeight(800);
stage.setScene(scene);
stage.show();
}
private LineChart createChart(final double minX, final double maxX, final double step, final Function<Double, Double> f) {
double minY = Double.MAX_VALUE;
double maxY = -Double.MAX_VALUE;
final var series = new XYChart.Series();
for (double x = minX; x <= maxX; x += step) {
final double y = f.apply(x);
System.out.printf("%f = f(%f)%n", y, x);
Double.isInfinite(y);
if (!Double.isInfinite(y)) {
minY = Math.min(minY, y);
maxY = Math.max(maxY, y);
}
final var data = new XYChart.Data(x, Double.isInfinite(y) ? Double.NaN : y);
series.getData().add(data);
}
System.out.printf("%f - %f%n", minY, maxY);
final var xAxis = new NumberAxis(minX, maxX, (maxX - minX) / 5);
xAxis.setLabel("X");
final var yAxis = new NumberAxis(minY, maxY, (maxY - minY) / 5);
yAxis.setLabel("Y");
final var chart = new LineChart(xAxis, yAxis);
chart.getData().add(series);
return chart;
}
private LineChart createChartGap(final double minX, final double maxX, final double step, final Function<Double, Double> f) {
double minY = Double.MAX_VALUE;
double maxY = -Double.MAX_VALUE;
final var series = new XYChart.Series();
for (double x = minX; x <= maxX; x += step) {
final double y = f.apply(x);
System.out.printf("%f = f(%f)%n", y, x);
Double.isInfinite(y);
if (!Double.isInfinite(y)) {
minY = Math.min(minY, y);
maxY = Math.max(maxY, y);
}
final var data = new XYChart.Data(x, Double.isInfinite(y) ? Double.NaN : y);
series.getData().add(data);
}
System.out.printf("%f - %f%n", minY, maxY);
final var xAxis = new GapNumberAxis(minX, maxX, (maxX - minX) / 5);
xAxis.setLabel("X");
final var yAxis = new GapNumberAxis(minY, maxY, (maxY - minY) / 5);
yAxis.setLabel("Y");
final var chart = new GapLineChart(xAxis, yAxis);
chart.getData().add(series);
return chart;
}
} |
Partager