Java 如何创建一个规则的五边形并围绕一个固定点旋转它?

Java 如何创建一个规则的五边形并围绕一个固定点旋转它?,java,graphics,rotation,polygon,Java,Graphics,Rotation,Polygon,我目前是一名Java课程的大学生,今晚我有一个项目要交(我知道是临时通知) 以下是描述: 在本项目中,您需要编写一个Java程序,在固定点周围绘制一个正多边形多次 用户给出3个整数。。。一个用于形状类型(3=三角形,4=正方形,5=五角大楼,0=圆),一个用于形状的半径(如果形状内接在圆中),一个用于他们希望绘制形状的次数。然后,程序应将形状围绕窗口中心旋转指定的次数,每个形状间隔均匀。 例如 ![正方形重复24次。][1] 我已经算出了三角形和正方形的代码,但我真的被五角大楼困住了。我试过的每

我目前是一名Java课程的大学生,今晚我有一个项目要交(我知道是临时通知)

以下是描述: 在本项目中,您需要编写一个Java程序,在固定点周围绘制一个正多边形多次 用户给出3个整数。。。一个用于形状类型(3=三角形,4=正方形,5=五角大楼,0=圆),一个用于形状的半径(如果形状内接在圆中),一个用于他们希望绘制形状的次数。然后,程序应将形状围绕窗口中心旋转指定的次数,每个形状间隔均匀。 例如 ![正方形重复24次。][1]

我已经算出了三角形和正方形的代码,但我真的被五角大楼困住了。我试过的每一个代码都不会画一个五角大楼,更不用说旋转24次了…如果有人能帮我指引正确的方向,我会非常感激

这是我到目前为止所拥有的。。。这很艰难,但这是一个开始

public class ShapeDrawer extends JPanel{

public double x1, x2, x3, x4, x5, y1, y2, y3, angle= 0, changeAngle;
public int radius;
public int amount, item, center;


public ShapeDrawer(int sh, int ra, int am){
    item = sh;
    radius = ra;
    amount = am;
    changeAngle = 360/amount;
    center = (radius+500)/2;

}

public void paintComponent(Graphics g){

    super.paintComponent(g);

    Graphics2D g2d = (Graphics2D) g;


    if(item==3)
    {
        g2d.setColor(Color.MAGENTA);    

        for(int i = 0; i < amount; i++){

                x1 = center + ((radius * Math.sqrt(3)) * Math.cos(Math.toRadians((angle+(i *changeAngle)) + 300)));
                y1 = center + ((radius * Math.sqrt(3)) * Math.sin(Math.toRadians((angle+(i *changeAngle)) + 300)));
                x2= center + ((radius * Math.sqrt(3)) * Math.cos(Math.toRadians((angle+(i *changeAngle)) + 240)));
                y2= center + ((radius * Math.sqrt(3)) * Math.sin(Math.toRadians((angle+(i *changeAngle)) + 240)));



                int[] xValues = {(radius+500)/2, (int)x1, (int)x2};
                int[] yValues = {(radius+500)/2, (int)y1, (int)y2};
                Polygon tri = new Polygon(xValues, yValues,3);
                g2d.drawPolygon(tri);


            }
    }

    if(item==4)
    {
        g2d.setColor(Color.CYAN);

        for(int i = 0; i<amount; i++)
        {
            x1= center + ((radius*2) * Math.cos(Math.toRadians((angle+(i*changeAngle)) + 315)));
            y1= center + ((radius*2) * Math.sin(Math.toRadians((angle+(i*changeAngle)) + 315)));
            x2= center + ((radius* Math.sqrt(8)) * Math.cos(Math.toRadians((angle+(i*changeAngle)) + 270)));
            y2= center + ((radius* Math.sqrt(8)) * Math.sin(Math.toRadians((angle+(i*changeAngle)) + 270)));
            x3= center + ((radius*2) * Math.cos(Math.toRadians((angle+(i*changeAngle)) + 225)));
            y3= center + ((radius*2) * Math.sin(Math.toRadians((angle+(i*changeAngle)) + 225)));

            int[] xValues = {center, (int)x1, (int)x2, (int)x3};
            int[] yValues = {center, (int)y1, (int)y2, (int)y3};
            Polygon squa = new Polygon(xValues, yValues,4);
            g2d.drawPolygon(squa);



        }

        if(item==5)
        {
                g2d.setColor(Color.GREEN);

                for(int i=0;i<amount;i++){

                    Polygon pent = new Polygon();

                    for (int i = 0; i < 5; i++) 
                    {  
                        pent.addPoint((int) (center+radius * Math.cos(i * 2 * Math.PI / 5)), (int) (center+radius * Math.sin(i * 2 * Math.PI / 5)));

                    }

                g2d.drawPolygon(pent);
                }

        }

        if(item==0)
        {
            g2d.setColor(Color.BLUE);

            for(int i =0; i < amount; i++)
            {


            }

        }
    }
}
公共类ShapeDrawer扩展了JPanel{
公共双x1、x2、x3、x4、x5、y1、y2、y3,角度=0,变化角度;
公共整数半径;
公共整数金额、项目、中心;
公共形状雷达(内部sh、内部ra、内部am){
项目=sh;
半径=ra;
金额=am;
变更角度=360/金额;
中心=(半径+500)/2;
}
公共组件(图形g){
超级组件(g);
Graphics2D g2d=(Graphics2D)g;
如果(项目==3)
{
g2d.setColor(颜色为洋红色);
对于(int i=0;i对于(inti=0;iSo)您已经为3和4编写了代码,但还没有尝试5?“我尝试过的每一个代码都不会画一个五角大楼”--好吧,展示你所尝试的,并解释它不起作用的原因。你可能付出了很多努力,但我们无法从你发布的内容中看出这一点,而且这里没有人会为你编写代码,特别是因为这是一项家庭作业。你在计算几何体方面有困难吗?如果有,这不是一个问题。那么作业要求您处理任意数量的多边形边?如果是这样,您的3边和4边代码将不会有太大帮助。您应该考虑半径和内切圆的含义,以及它们如何帮助您解决此问题。编辑:我所说的是正确的,即使您只需要处理多达五边形。@JimGarrison我一直在研究t他编写了绘制五角大楼的代码,总共大概需要4个小时……我从数学的角度理解了一个普通五角大楼的几何结构,我只是不知道从哪里开始编写代码。我在上面编辑了一些我尝试过的东西,但我觉得它完全错了base@acbabis那么,我是否应该尝试制作一种通用代码来根据形状的边数绘制不同的形状?Like而不是我所有的if语句,通过一个循环运行它,设置边数=n,并更改程序基于n绘制的内容?(我希望这是有意义的)..@user3281559我想说的是,能够处理任何n将帮助您解决问题;但是如果您认为您所说的是正确的,那么您可能是对的:)