3

我试图将形状旋转 90 度。

我的形状由一个类保持,该类具有 (x,y) 的几个点和 (point1,point2) 的线,所有线共同构成形状。

实际上,为了将形状旋转 90(或任何其他角度)度,它应该通过以下公式转换形状的点 -

(x,y) -> (  x*cos(90)+y*sin(90) , -x*sin(90)+y*cos(90)  )  

所以为了实现上述我尝试了以下操作(它对作为形状组成部分的每个点进行操作) -

float x, y;
// get the current point location ...
x = currentPoint.x;
y = currentPoint.y; 
// create the cos , sin
float cosA = (float) Math.cos(Math.toRadians(90));
float sinA = (float) Math.sin(Math.toRadians(90));
currentPoint.x = (int) (x * cosA + y * sinA);
currentPoint.y = (int) (-x * sinA + y * cosA);

但是当我在这个旋转之后绘制形状时,它会给出非常奇怪的结果。

你能在这个实现中检测到错误吗?

4

1 回答 1

1

您需要扩展 JPanel 并使用您的类来实现此方法。这是旋转 JPanel 控件的代码

@Override
public void paintComponent(Graphics g) {
    Graphics2D g2d = (Graphics2D) g;
    int w2 = getWidth() / 2;
    int h2 = getHeight() / 2;
    g2d.rotate(-Math.PI / 2, w2, h2);
    super.paintComponent(g);
}

现在使用这个自定义类而不是 JPanel

于 2013-04-30T12:31:41.450 回答