本文介紹了在JavaFX上,有沒有辦法在不知道所有點(diǎn)的坐標(biāo)(而只知道邊數(shù))的情況下繪制一個(gè)正則多邊形?的處理方法,對(duì)大家解決問題具有一定的參考價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧!
問題描述
例如,要在JavaFX上繪制正十二邊形,您必須知道12個(gè)點(diǎn)的所有坐標(biāo)。但我想知道是否有任何方法可以在不知道點(diǎn)的坐標(biāo)的情況下繪制它(而只知道該多邊形有12條邊),這樣如果用戶鍵入‘6’,它就會(huì)繪制一個(gè)正六邊形,如果用戶鍵入‘12’,它就會(huì)畫一個(gè)正十二邊形。
推薦答案
不,在不知道角的坐標(biāo)的情況下無法繪制多邊形。在呈現(xiàn)引擎不知道需要呈現(xiàn)的頂點(diǎn)的坐標(biāo)的情況下,如何呈現(xiàn)此類對(duì)象?
您當(dāng)然可以通過將極坐標(biāo)轉(zhuǎn)換為笛卡爾坐標(biāo)來計(jì)算給定中心點(diǎn)的正多邊形點(diǎn)的坐標(biāo)、角距中心的距離以及其中一個(gè)角距中心點(diǎn)的角度:
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();
}
這篇關(guān)于在JavaFX上,有沒有辦法在不知道所有點(diǎn)的坐標(biāo)(而只知道邊數(shù))的情況下繪制一個(gè)正則多邊形?的文章就介紹到這了,希望我們推薦的答案對(duì)大家有所幫助,