题目:
编程实现绘制正N边形,且可以指定正N边形的边数,边长,中心坐标
public class RegularPolygon {
private int CenterX;
private int CenterY;
private int NumVerge;
private double LenVerge;
public int getCenterX() {
return CenterX;
}
public void setCenterX(int centerX) {
this.CenterX = centerX;
}
public int getCenterY() {
return CenterY;
}
public void setCenterY(int centerY) {
this.CenterY = centerY;
}
public int getNumVerge() {
return NumVerge;
}
public void setNumVerge(int numVerge) {
this.NumVerge = numVerge;
}
public double getLenVerge() {
return LenVerge;
}
public void setLenVerge(int lenVerge) {
this.LenVerge = lenVerge;
}
/**
* 正N边形的面积计算公式:S=0.5sin(2π/N)NR^2
* 其中R为外接圆半径,若边长为L
* 则sin(π/N)=L/2R
* 经过推导得S=NL^2cot(π/N)/4
*/
public double getArea() {
return this.NumVerge*Math.pow(LenVerge, 2)*Math.atan(Math.PI/(double)this.NumVerge)/4;
}
public double getPerimeter() {
return this.LenVerge*this.NumVerge;
}
}
import java.util.Scanner
import javafx.application.Application
import javafx.collections.ObservableList
import javafx.scene.Scene
import javafx.scene.layout.Pane
import javafx.scene.paint.Color
import javafx.scene.shape.Polygon
import javafx.stage.Stage
public class Main extends Application{
public static RegularPolygon input() {
System.out.println("请输入正n边形边数和边长:")
Scanner input=new Scanner(System.in)
int n=input.nextInt()
int len=input.nextInt()
System.out.println("请输入正n边形中心坐标:")
int centerx=input.nextInt()
int centery=input.nextInt()
RegularPolygon g=new RegularPolygon()
g.setCenterX(centerx)
g.setCenterY(centery)
g.setLenVerge(len)
g.setNumVerge(n)
System.out.println("面积:"+g.getArea())
System.out.println("周长:"+g.getPerimeter())
return g
}
@Override
public void start(Stage primaryStage) {
RegularPolygon g=input()
Pane pane=new Pane()
Polygon polygon=new Polygon()
pane.getChildren().add(polygon)
polygon.setFill(Color.PINK)
ObservableList<Double> list= polygon.getPoints()
double centerX=g.getCenterX(),centerY=g.getCenterY()
double R=0.5*g.getLenVerge()/Math.sin(Math.PI/g.getNumVerge())
for(int i=0
list.add(centerX+R*Math.cos(Math.PI/2+i*2*Math.PI/g.getNumVerge()))
list.add(centerY+R*Math.sin(Math.PI/2+i*2*Math.PI/g.getNumVerge()))
}
Scene scene=new Scene(pane,600,600)
primaryStage.setTitle("正n边形")
primaryStage.setScene(scene)
primaryStage.show()
}
public static void main(String [] args) {
Application.launch(args)
}
}



