Java2D:如何以正确的旋转方式围绕中心放置图像

Java2D:如何以正确的旋转方式围绕中心放置图像,java,rotation,affinetransform,Java,Rotation,Affinetransform,我无法将图像放置在旋转角度正确的中心周围。这是我目前正在使用的代码,输出可以在屏幕截图中看到。用户可以动态更改切片数,因此我需要根据切片数计算新的旋转值,但我无法找到正确的方法。我可以向pictureAngle任意添加一个值来调整旋转,但它仅适用于此特定数量的切片 注意:要绘制的第一张图片是右侧红色切片上的图片,它在上部屏幕截图中显示为直线 double angle = (double) 360 / this.slices.length; for (int i = 0; i < this

我无法将图像放置在旋转角度正确的中心周围。这是我目前正在使用的代码,输出可以在屏幕截图中看到。用户可以动态更改切片数,因此我需要根据切片数计算新的旋转值,但我无法找到正确的方法。我可以向pictureAngle任意添加一个值来调整旋转,但它仅适用于此特定数量的切片

注意:要绘制的第一张图片是右侧红色切片上的图片,它在上部屏幕截图中显示为直线

double angle = (double) 360 / this.slices.length;

for (int i = 0; i < this.slices.length; i++) {

    double pictureAngle = Math.toRadians(i * (360 / this.slices.length));

    px[i] = this.centerX + (wheelSize/2.1) * Math.cos(Math.toRadians((i * angle) + angle / 2));
    py[i] = this.centerY + (wheelSize/2.1) * Math.sin(Math.toRadians((i * angle) + angle / 2));

    p.addPoint((int)px[i], (int)py[i]);

    AffineTransform backup1 = g2d.getTransform();
    AffineTransform trans = new AffineTransform();

    trans.rotate(pictureAngle, (int)px[i], (int)py[i]);

    g2d.transform( trans );

    g2d.drawImage(pictures[i], (int)px[i] - (pictures[i].getWidth() / 2), (int)py[i], null);

    g2d.setTransform( backup1 );

    g2d.drawLine((int)this.centerX, (int)this.centerY, (int)px[i], (int)py[i]);


}

双角度=(双)360/nOfSlices;
双起动角度=90-角度/2;
对于(int i=0;i
解决方案是在中间画出第一个切片(我用黑色切片把它画出来——下面是图片),把第一张图片放在里面,旋转0圈,然后根据切片角度逐步旋转图片。

double pictureAngle = Math.toRadians(103 + i * (360 / this.slices.length));
        double angle = (double) 360 / nOfSlices;
        double startingAngle = 90 - angle / 2;

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

            // this is the old code

            //rc2D arc = new Arc2D.Double(0, 0, wheelSize, wheelSize,
            //        i * angle,
            //        angle,
            //        Arc2D.PIE);

            Arc2D arc = new Arc2D.Double(0, 0, wheelSize, wheelSize,
                    (i * angle) - startingAngle,
                    angle,
                    Arc2D.PIE);