簡體   English   中英

在Java中旋轉矩形

[英]Rotate Rectangle in Java

我需要創建圍繞其中心旋轉的矩形(因此它們不需要與坐標系的軸平行)。 所以basicly每個矩形可以由center-Xcenter-Ywidthheightangle定義 我想要做的是對這些矩形中是否包含某些點進行計算(因此不涉及繪圖)。 我想我不能使用Rectangle2D類,因為這些矩形將始終與坐標系的x和y軸平行。 是通過編寫我自己的矩形類來獲得此功能的唯一方法,還是可以使用任何現有的(類似於Rectangle2D )?

旋轉你要測試的所有點,並使用Recthai2D的contains(Point)方法作為Mihai。

但是如果你真的想要旋轉矩形,你可以像這樣做(這是整數版本,但你可以用Rectangle2D做到這一點:))。

public class TestRotate {
    public static void main(String... args) {

        Rectangle r = new Rectangle(50, 50, 100, 100);
        Point check = new Point(100, 151); // clearly outside

        System.out.println("first: " + r.contains(check));

        AffineTransform at = AffineTransform.getRotateInstance(
                Math.PI/4, r.getCenterX(), r.getCenterY());

        Polygon p = new Polygon(); 

        PathIterator i = r.getPathIterator(at);
        while (!i.isDone()) {
            double[] xy = new double[2];
            i.currentSegment(xy);
            p.addPoint((int) xy[0], (int) xy[1]);
            System.out.println(Arrays.toString(xy));

            i.next();
        }

        // should now be inside :)
        System.out.println("second: " + p.contains(check));
    }
}

你可以使用Rectangle2D來檢查包容,如果不是將你的矩形旋轉一個角度,比如逆時針旋轉,你需要相對於矩形的中心以相同的角度旋轉你需要檢查的每個點。 就像是

double dx = point.x - rectangleCenter.x;
double dy = point.y - rectangleCenter.y;
double newX = rectangleCenter.x - dx*Math.cos(angle) + dy*Math.sin(angle);
double newY = rectangleCenter.x - dx*Math.sin(angle) - dy*Math.cos(angle);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM