本文介紹了在JavaFX上,有沒有辦法在不知道所有點的坐標(而只知道邊數)的情況下繪制一個正則多邊形?的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!
問題描述
例如,要在JavaFX上繪制正十二邊形,您必須知道12個點的所有坐標。但我想知道是否有任何方法可以在不知道點的坐標的情況下繪制它(而只知道該多邊形有12條邊),這樣如果用戶鍵入‘6’,它就會繪制一個正六邊形,如果用戶鍵入‘12’,它就會畫一個正十二邊形。
推薦答案
不,在不知道角的坐標的情況下無法繪制多邊形。在呈現引擎不知道需要呈現的頂點的坐標的情況下,如何呈現此類對象?
您當然可以通過將極坐標轉換為笛卡爾坐標來計算給定中心點的正多邊形點的坐標、角距中心的距離以及其中一個角距中心點的角度:
private static void setPolygonSides(Polygon polygon, double centerX, double centerY, double radius, int sides) {
polygon.getPoints().clear();
final double angleStep = Math.PI * 2 / sides;
double angle = 0; // assumes one point is located directly beneat the center point
for (int i = 0; i < sides; i++, angle += angleStep) {
polygon.getPoints().addAll(
Math.sin(angle) * radius + centerX, // x coordinate of the corner
Math.cos(angle) * radius + centerY // y coordinate of the corner
);
}
}
@Override
public void start(Stage primaryStage) {
Spinner<Integer> spinner = new Spinner(3, Integer.MAX_VALUE, 3);
Polygon polygon = new Polygon();
setPolygonSides(polygon, 200, 200, 150, spinner.getValue());
spinner.valueProperty().addListener((observable, oldValue, newValue) -> {
setPolygonSides(polygon, 200, 200, 150, spinner.getValue());
});
StackPane stackPane = new StackPane(polygon);
stackPane.setPrefSize(400, 400);
HBox root = new HBox(spinner, stackPane);
Scene scene = new Scene(root);
primaryStage.setScene(scene);
primaryStage.show();
}
這篇關于在JavaFX上,有沒有辦法在不知道所有點的坐標(而只知道邊數)的情況下繪制一個正則多邊形?的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,