javaFx--绘制正多边形

题目:

编程实现绘制正N边形,且可以指定正N边形的边数,边长,中心坐标

  • RegularPolygon.java:
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;
    }

}
  • Main.java:
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;i<g.getNumVerge();i++) {
            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);
    }
}

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
JavaFX中的Polygon和Polyline类都是用于绘制边形的类。其中,Polygon类绘制的是封闭的多边形,而Polyline类绘制的是不封闭的折线。 下面是Polygon和Polyline的类图介绍: --Polygon类图-- 类名:Polygon 属性:points - 一个ObservableList<Point2D>类型的属性,表示多边形的顶点坐标集合 方法: 1. getPoints() - 返回多边形顶点坐标集合 2. setPoints(ObservableList<Point2D> points) - 设置多边形顶点坐标集合 3. getStrokeType() - 返回多边形轮廓线条类型 4. setStrokeType(StrokeType type) - 设置多边形轮廓线条类型 5. getStrokeWidth() - 返回多边形轮廓线条宽度 6. setStrokeWidth(double width) - 返回多边形轮廓线条颜色 8. setStroke(Color color) - 设置多边形轮廓线条颜色 9. getFill() - 返回多边形填充颜色 10. setFill(Color color) - 设置多边形填充颜色 --Polyline类图-- 类名:Polyline 属性:points - 一个ObservableList<Point2D>类型的属性,表示折线的顶点坐标集合 方法: 1. getPoints() - 返回折线顶点坐标集合 2. setPoints(ObservableList<Point2D> points) - 设置折线顶点坐标集合 3. getStrokeType() - 返回折线轮廓线条类型 4. setStrokeType(StrokeType type) - 设置折线轮廓线条类型 5. getStrokeWidth() - 返回折线轮廓线条宽度 6. setStrokeWidth(double width) - 设置折线轮廓线条宽度 7. getStroke() - 返回折线轮廓线条颜色 8. setStroke(Color color) - 设置折线轮廓线条颜色
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值