0

ここでポイントとローテーションについていくつか質問があることは承知しており、ほとんどそこにいるような気がします。少しプッシュする必要があります。

このような6点の形状があります。

ここに画像の説明を入力

点Pを点Cを中心に回転させたい

そして、これを手動で行う必要があるため、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();

このコードで何が起こるかというと、このように点 P が中央に配置されます。

ここに画像の説明を入力

4

2 に答える 2

4

doubleからintへのキャストにより、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;
于 2013-05-24T21:12:09.410 に答える