Java中的旋转矩形
我需要创建围绕其中心旋转的矩形(因此它们不需要与坐标系的轴平行)。因此,基本上每个矩形都可以通过中心-X、中心-Y、宽度、高度和角度来定义。然后我想做的是计算某些点是否包含在这些矩形中(因此不涉及绘图)。我想我不能使用Java中的旋转矩形,java,rotation,contains,Java,Rotation,Contains,我需要创建围绕其中心旋转的矩形(因此它们不需要与坐标系的轴平行)。因此,基本上每个矩形都可以通过中心-X、中心-Y、宽度、高度和角度来定义。然后我想做的是计算某些点是否包含在这些矩形中(因此不涉及绘图)。我想我不能使用Rectangle2D类,因为这些矩形始终与坐标系的x轴和y轴平行。编写我自己的矩形类是获得此功能的唯一方法,或者我是否可以使用任何现有的东西(类似于Rectangle2D)?您可以使用Rectangle2D检查是否包含,而不是将矩形旋转一个角度,比如逆时针,相对于矩形的中心,将需
Rectangle2D
类,因为这些矩形始终与坐标系的x轴和y轴平行。编写我自己的矩形类是获得此功能的唯一方法,或者我是否可以使用任何现有的东西(类似于Rectangle2D
)?您可以使用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);
旋转所有要测试的点,并使用矩形2D的contains(Point)方法,就像Mihai所做的一样 但是如果你真的想旋转矩形,你可以这样做(这是整数版本,但是你也可以使用矩形2D:)
我觉得你在描述你找到的解决某个问题的方法。还可以解释您试图解决的特定问题。很有可能,已经存在针对该问题的经验证的解决方案/算法。我想模拟智能天线。所以每个矩形的中心是一个节点(有几个智能天线)。矩形则是简化的信号模式。这意味着矩形将被旋转,以便它们指向接收器节点的方向。然后我想计算某些天线是否在信号模式/矩形中,可能会受到该信号的干扰。因此,我需要一个计算点是否包含在矩形中的方法。我们从哪里获得多边形类?
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));
}
}