在Java中旋转矩形

问题描述:

我需要创建围绕其中心旋转的矩形(因此它们不需要平行于坐标系的轴)。所以basicelly每个矩形可以通过中心-X中心-Y宽度高度角度来限定。那么我想要做的是对这些矩形中是否包含某些点进行计算(因此不涉及任何绘图)。我想我不能使用Rectangle2D类,因为这些矩形将总是平行于坐标系的x和y轴。通过编写我自己的矩形类来获得此功能的唯一方法是否存在(类似于Rectangle2D)我可以使用?在Java中旋转矩形

+1

我得到了一个印象,你正在描述你发现某个问题的解决方案。也可以解释你想要解决的具体问题。很可能,现在已经有针对这个问题的已经证明的解决方案/算法。 – 2010-11-10 14:51:08

+0

我想模拟智能天线。所以每个矩形的中心是一个节点(有几个智能天线)。矩形然后是简化的信号模式。这意味着矩形将被旋转,以便它们指向接收器节点的方向。然后,我想计算某些天线是否处于可能被此信号干扰的信号模式/矩形中。因此,我需要一种方法来计算一个点是否包含在一个矩形中。 – gaussd 2010-11-10 14:59:01

旋转所有要测试的点,并使用Mihai所做的Rectangle2D的contains(Point)方法。

但是,如果你真的想旋转矩形,你可以这样做(这是整数版本,但可能你可以用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)); 
    } 
} 
+0

我们从哪里得到Polygon Class? – 2014-05-27 04:29:00

+0

java.awt.Polygon – 2016-07-11 05:54:53

您可以使用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);