旋转中心点周围的点

时间:2013-05-24 20:22:00

标签: java rotation center point

我知道这里有关于点和旋转的一些问题,我觉得我几乎就在那里。我需要一点推动。

我有一个像这样的6分的形状。

enter image description here

我想围绕Point C

旋转Point P

我需要手动执行此操作,因此我对使用AffineTransform

不感兴趣

提前致谢


Thread thread = new Thread() {

    public void run() {

        //THE RADIUS OF THE SHAPE IS 100

        //GET THE POINT P
        PointClass point_class = points.get(0);

        //GET THE CENTER POINT C
        Point center = new Point(point_class.point.x - 100, point_class.point.y);

        int deg = 0;

        while(deg < 360) {

            //GET THE ANGLE IN RADIANS
            double angle = Math.toRadians(deg);

            //FIRST TRANSLATE THE DIFFERENCE
            int x1 = point_class.point.x - center.x;
            int y1 = point_class.point.y - center.y;

            //APPLY ROTATION
            x1 = (int) ((double) x1 * Math.cos(angle) - y1 * Math.sin(angle));
            y1 = (int) ((double) x1 * Math.sin(angle) + y1 * Math.cos(angle));

            //TRANSLATE BACK
            point_class.point.x = x1 + center.x;
            point_class.point.y = y1 + center.y;

            //ROTATE + 1 DEEGRE NEXT TIME
            deg++;

            try {

                //SLEEP TO SEE THE DIFFERENCE
                sleep(100);

            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

    }
};

thread.start();

这段代码会发生的事情是Point P像这样

在中心结束

enter image description here

2 个答案:

答案 0 :(得分:3)

我认为你的半径每次都会在while循环中缩小,因为会将双精度转换为整数。这个可能更好地工作:

double x1 = point_class.point.x - center.x;
double y1 = point_class.point.y - center.y;

//APPLY ROTATION
x1 = x1 * Math.cos(angle) - y1 * Math.sin(angle));
y1 = x1 * Math.sin(angle) + y1 * Math.cos(angle));

//TRANSLATE BACK
point_class.point.x = (int)Math.ceil(x1) + center.x;
point_class.point.y = (int)Math.ceil(y1) + center.y;

答案 1 :(得分:2)

所以我弄清楚出了什么问题。

两点的翻译,

//FIRST TRANSLATE THE DIFFERENCE
double x1 = point_class.point.x - center.x;
double y1 = point_class.point.y - center.y;

必须走出循环,因为在应用旋转矩阵时我需要在该位置取基。而且在循环中,我应该将deegre固定为1,这样它只会增加1而不是81 + 82 + 83 ......不知道我为什么这样做。

希望这有助于某人=)