Java仿射变换以旋转GeneralPath

Java仿射变换以旋转GeneralPath,java,graphics,affinetransform,Java,Graphics,Affinetransform,我能理解仿射变换的这种行为。 这是我的代码: // draw the needle float needleX, needleY; needleX = am.x_arc_center; needleY = am.y_final_arc; GeneralPath needle = new GeneralPath(GeneralPath.WIND_NON_ZERO); needle.moveTo(needleX, needleY); needle.lineTo(needleX - 3, needle

我能理解仿射变换的这种行为。 这是我的代码:

// draw the needle
float needleX, needleY;
needleX = am.x_arc_center;
needleY = am.y_final_arc;
GeneralPath needle = new GeneralPath(GeneralPath.WIND_NON_ZERO);
needle.moveTo(needleX, needleY);
needle.lineTo(needleX - 3, needleY - 3);
needle.lineTo(needleX - am.radius, needleY);
needle.lineTo(needleX - 3, needleY + 3);
needle.closePath();
g2d.fill(needle);
AffineTransform at = new AffineTransform();
at.rotate(Math.PI / 6);
needle.transform(at);
g2d.draw(needle);
我准备了一个带有普通路径的针,然后我想旋转它以指示0和PI/2之间的精确角度。 但它只画了一个水平的针,变换似乎被忽略了。 怎么了


谢谢

用g2d.fill(针)绘制路径;没有变换-然后用变换进行绘制(只有g2d.draw(针);在不同的面板/图像中结尾没有g2d.fill(针);中间)等等-它们是一样的吗?是的,它们是一样的:-(我很难过…这个简单的代码什么也不绘制…//保存当前变换上下文仿射变换current=g2d.getTransform();g2d.setPaint(新颜色(255、255、255));矩形r=新矩形(10、10、100、10);仿射变换at=新仿射变换();at.rotate(Math.PI/6);g2d.transform(at);g2d.fill(r);g2d.draw(r);//恢复原始变换上下文g2d.setTransform(当前);如果移除g2d.transform,矩形会出现…为什么?使用g2d.fill(指针)绘制路径;不使用transform-然后在不同的面板/图像中使用transform(仅使用g2d.draw(指针);结尾处没有g2d.fill(指针);介于两者之间)进行绘制-它们是相同的吗?是的,它们是相同的:-(我很难过…这个简单的代码什么也没画…//保存当前变换上下文仿射变换current=g2d.getTransform();g2d.setPaint(新颜色(255,255,255));矩形r=新矩形(10,10,100,10);仿射变换at=新仿射变换();at.rotate(Math.PI/6);g2d.transform(at);g2d.fill(r);g2d.draw(r);//恢复原始转换上下文g2d.setTransform(当前);如果删除g2d.transform,矩形会出现……为什么?