在Java中旋转矩形

我需要创建围绕其中心旋转的矩形(因此它们不需要与坐标系的轴平行)。 所以basicly每个矩形可以由center-Xcenter-Ywidthheightangle定义 。 我想要做的是对这些矩形中是否包含某些点进行计算(因此不会涉及绘图)。 我想我不能使用Rectangle2D类,因为这些矩形将始终与坐标系的x和y轴平行。 是通过编写我自己的矩形类来获得此function的唯一方法,还是存在任何现有的(类似于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);