Java 试着用正弦和余弦来做星星

Java 试着用正弦和余弦来做星星,java,swing,trigonometry,java-2d,japplet,Java,Swing,Trigonometry,Java 2d,Japplet,所以我想为一个我要画一面旗帜的节目做个明星。我几乎只限于JavaApplet类。因为对于每个中心不同的恒星,过程应该是相同的,所以我想我应该将中心传递给一个具有X和Y值的方法,然后使用多边形根据与中心的角度绘制它。问题是出来的形状根本不是恒星 public void paint( Graphics g) { super.paint( g ); Polygon star= new Polygon(); int radius=20; int roundX=(int)M

所以我想为一个我要画一面旗帜的节目做个明星。我几乎只限于JavaApplet类。因为对于每个中心不同的恒星,过程应该是相同的,所以我想我应该将中心传递给一个具有X和Y值的方法,然后使用多边形根据与中心的角度绘制它。问题是出来的形状根本不是恒星

public void paint( Graphics g)
{
    super.paint( g );
    Polygon star= new Polygon();
    int radius=20;
    int roundX=(int)Math.round(radius*Math.cos(Math.toRadians(54)));
    int roundY=(int)Math.round(radius*Math.sin(Math.toRadians(54)));
    int originX=100,originY=100;
    //int radius=20;
    int topY=originY+radius;
    int bottomLeftX=originX+roundX;
    int bottomY=originY-roundY;
    int middleY=originY+(int)Math.round(radius*Math.sin(Math.toRadians(18)));;
    int midRightX=originX+(int)Math.round(radius*Math.cos(Math.toRadians(18)));;
    int midLeftX=originX-(int)Math.round(radius*Math.cos(Math.toRadians(18)));
    int bottomRightX=originX+roundX;
    int bottomRightY=middleY-roundY;
    star.addPoint(originX, originY);
    star.addPoint(originX, topY);
    star.addPoint(bottomLeftX, bottomY);
    star.addPoint(midRightX, middleY);
    //star.addPoint(midLeftX, middleY);
    //star.addPoint(bottomRightX, bottomY);
    //star.addPoint(originX, topY);
    g.drawPolygon(star);
}
因此,左下角的点应与中心成234度角,或与x轴成54度角。当我对这两个代码进行编码并更改操作(+或负号)时,它似乎朝着与我预期相反的方向发射。中点应该在中心上方18度,尽管从外观上看,它们看起来几乎与x轴成一条直线。我一直在一个接一个地禁用这些点,看看是否可以调整它以接近一颗恒星,但在这一点上,我意识到这相当于蒙着眼睛和喝醉时的雕刻


如果你能帮我找出问题所在,我将不胜感激。

也许你想要一颗五角星

private double sin(int degree) {
    return Math.sin(Math.toRadians(degree));
}

private double cos(int degree) {
    return Math.cos(Math.toRadians(degree));
}

@Override
public void paint(Graphics g) {
    super.paint(g);
    Polygon star = new Polygon();

    int radius = 20;
    int originX = 100;
    int originY = 100;
    int innerRadius = (int) Math.round(radius * sin(18) / sin(126));

    Point[] points = new Point[11];
    // top center 
    points[0] = new Point();
    points[0].x = 0;
    points[0].y = -radius;
    // inner top left
    points[1] = new Point();
    points[1].x = -(int) Math.round(innerRadius * cos(54));
    points[1].y = -(int) Math.round(innerRadius * sin(54));
    // top left 
    points[2] = new Point();
    points[2].x = -(int) Math.round(radius * cos(18));
    points[2].y = -(int) Math.round(radius * sin(18));
    // inner bottom left
    points[3] = new Point();
    points[3].x = -(int) Math.round(innerRadius * cos(18));
    points[3].y = (int) Math.round(innerRadius * sin(18));
    // bottom left
    points[4] = new Point();
    points[4].x = -(int) Math.round(radius * cos(54));
    points[4].y = (int) Math.round(radius * sin(54));
    // inner bottom center
    points[5] = new Point();
    points[5].x = 0;
    points[5].y = innerRadius;
    // bottom right
    points[6] = new Point();
    points[6].x = (int) Math.round(radius * cos(54));
    points[6].y = (int) Math.round(radius * sin(54));
    // inner bottom right
    points[7] = new Point();
    points[7].x = (int) Math.round(innerRadius * cos(18));
    points[7].y = (int) Math.round(innerRadius * sin(18));
    // top right
    points[8] = new Point();
    points[8].x = (int) Math.round(radius * cos(18));
    points[8].y = -(int) Math.round(radius * sin(18));
    // inner top right
    points[9] = new Point();
    points[9].x = (int) Math.round(innerRadius * cos(54));
    points[9].y = -(int) Math.round(innerRadius * sin(54));
    // top center
    points[10] = new Point();
    points[10].x = 0;
    points[10].y = -radius;

    for (int i = 0; i < points.length; i++) {
        star.addPoint(originX + points[i].x, originY + points[i].y);
    }
    g.drawPolygon(star);

}
private double sin(整数度){
返回Math.sin(Math.toRadians(degree));
}
私人双cos(国际学位){
返回Math.cos(Math.toRadians(degree));
}
@凌驾
公共空间涂料(图g){
超级油漆(g);
多边形星形=新多边形();
int半径=20;
int-originX=100;
int-originY=100;
int innerRadius=(int)数学圆(半径*sin(18)/sin(126));
点[]点=新点[11];
//上中锋
点[0]=新点();
点[0].x=0;
点[0]。y=-半径;
//内左上角
点[1]=新点();
点[1].x=-(int)数学圆(内半径*cos(54));
点[1].y=-(int)数学圆(内半径*sin(54));
//左上角
点[2]=新点();
点[2].x=-(int)数学圆(半径*cos(18));
点[2]。y=-(int)数学圆(半径*sin(18));
//左下角内侧
点[3]=新点();
点[3].x=-(int)数学圆(内半径*cos(18));
点[3].y=(int)数学圆(内半径*sin(18));
//左下角
点[4]=新点();
点[4].x=-(int)数学圆(半径*cos(54));
点[4].y=(int)数学圆(半径*sin(54));
//内底中心
点[5]=新点();
点[5],x=0;
点[5],y=内半径;
//右下角
点[6]=新点();
点[6].x=(int)数学圆(半径*cos(54));
点[6].y=(int)数学圆(半径*sin(54));
//右下角内侧
点[7]=新点();
点[7].x=(int)数学圆(内半径*cos(18));
点[7].y=(int)数学圆(内半径*sin(18));
//右上角
点[8]=新点();
点[8].x=(int)数学圆(半径*cos(18));
点[8]。y=-(int)数学圆(半径*sin(18));
//右上角内侧
点[9]=新点();
点[9].x=(int)数学圆(内半径*cos(54));
点[9].y=-(int)数学圆(内半径*sin(54));
//上中锋
点[10]=新点();
点[10],x=0;
点[10],y=半径;
对于(int i=0;i
您希望/想要的图像类型的一点草图可能会有所帮助,您介意添加一些吗?“我几乎只限于Java小程序类。”1)为什么要编写小程序?如果是老师指定的,请参考。2) 另请参见和。谢谢,我不知道Point类的存在。现在我要把它封装在方法中,因为我必须调用它50次。你已经帮了我很多忙了,但是当我试图封装它时,我在方法中调用它时遇到了困难,我不能将图形g传递给方法,也不能返回星体对象以便让g来绘制它?您不必用代码编写它,但我如何才能将它放入一个可以调用的方法中呢?我只需要一个指向正确方向的点,一个指向适当文档的链接就可以了。我不理解你的问题。您可以在我的代码中轻松更改方法paint(),以返回创建的多边形星形对象。只需使用变量g删除所有内容,并将返回类型更改为Polygon,并在末尾返回创建的星形对象。并更改名称。我帮不了你准备文档,但我想你可以用谷歌搜索一下。