Java Graphics2d:如何使用 int 值平滑地旋转十二边形

我使用这个函数来创建一个十二边形:


private void getPoints(int x0, int y0,int r,int noOfDividingPoints)

{


    double angle1 = 1;


    x = new int[noOfDividingPoints];

    y = new int[noOfDividingPoints];


    for(int i = 0 ; i < noOfDividingPoints  ;i++)

    {

        angle1 = i * (360/noOfDividingPoints);


        x[i] = (int) Math.round(x0 + r * Math.cos(Math.toRadians(angle1)));

        y[i] = (int) Math.round(y0 + r * Math.sin(Math.toRadians(angle1)));


    }


}

然后我围绕一个中心旋转所有点:


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

    int x1 = x[i] - center.x;

    int y1 = y[i] - center.y;


    int x2 = (int) Math.round(x1 * Math.cos(radian) - y1 * Math.sin(radian));

    int y2 = (int) Math.round(x1 * Math.sin(radian) + y1 * Math.cos(radian));


    x[i] = x2 + center.x;

    y[i] = y2 + center.y;

}

有了这个,我终于画了线:


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

        g.drawLine(center.x, center.y, x[i], y[i]);

        if (i != 0 ) {

            g.drawLine(x[i-1], y[i-1], x[i], y[i]);

        } else {

            g.drawLine(x[i], y[i], x[x.length-1], y[x.length-1]);

        }

    }

问题:


十二边形旋转,但旋转会使顶点变形,使形状略微不规则;它在旋转过程中发生变化:这是因为 Math.round() 完成了从 double 到 int 的转换。


不使用 Math.round() 十二边形折叠到中心。


如何在不改变形状的情况下使用 int 值?我必须使用双打吗?


哔哔one
浏览 165回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java