旋转形状不起作用

时间:2014-10-24 12:09:08

标签: java swing rotation

我试图做一个旋转方法。首先我点击一个形状的任何顶点然后每次鼠标移动时,形状应该根据该顶点和新点之间的角度旋转。

它应该在自己的中心旋转(质心)但它最终会使形状变形,并使其变得越来越小。我不知道为什么这不起作用,目标是鼠标现在的点,索引是点击以启动旋转的顶点的索引。

矢量点包含所有形状的顶点。

以下是video发生的事情。

编辑1:现在getAngle函数返回一个弧度值。

新视频:https://www.youtube.com/watch?v=y0Ch6gE5Ebs

public void rotate(Point target, int index) {
        double centerx = getCentroid().getX();
        double centery = getCentroid().getY();
        float angle = getAngle(target, points.get(index));
        Vector<Point> pointsAux = new Vector<Point>(points.size());
        for(int i = 0; i<points.size(); i++){
            Point p = points.get(i);
        double newx = centerx + (p.getX()-centerx)*Math.cos(angle) - (p.getY()-centery)*Math.sin(angle);
        double newy = centery + (p.getX()-centerx)*Math.sin(angle) - (p.getY()-centery)*Math.cos(angle);
        p = new Point((int)newx, (int)newy);
        pointsAux.add(p);
        }
        points.clear();
        points.addAll(pointsAux);
    }   

    public float getAngle(Point target, Point clicked) {
        return (float) Math.atan2(target.getX()- clicked.getX(), target.getY() - clicked.getY());
    }
public Point getCentroid(){
        int sumx = 0;
        int sumy = 0;
        for(int i = 0; i<points.size();i++){
            sumx+=points.get(i).getX();
            sumy+=points.get(i).getY();
        }
         Point centroid = new Point(sumx/points.size(), sumy/points.size());
         return centroid;
    }

对于任何形式的帮助,我都会感激不尽。

0 个答案:

没有答案