我无法以正确的旋转角度围绕中心放置图像。这是我当前正在使用的代码,可以在屏幕截图中看到输出。用户可以动态更改切片的数量,因此我需要根据切片的数量计算一个新的旋转值,但是我不知道这样做的正确方法。我可以向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]);
}
如果我将旋转任意增加103度,则几乎可以正常工作,因此我想我需要一种适当的方法来根据切片数来正确设置此数字:
double pictureAngle = Math.toRadians(103 + i * (360 / this.slices.length));
答案 0 :(得分:0)
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);
解决方案是在中间绘制第一个切片(我用黑色切片将其突出显示-图片在下面),然后将第一个图片旋转0旋转,然后根据切片角度逐渐旋转图片