gpt4 book ai didi

java - 检查点数组是否位于矩形数组内?

转载 作者:行者123 更新时间:2023-12-01 17:30:13 26 4
gpt4 key购买 nike

我有一个顶点列表和一个形状区域(正方形/矩形)列表。顶点具有 x 和 y 坐标,区域具有 (x, y, 高度和宽度)。如何有效地检查每个顶点/区域的哪个顶点位于哪个区域?

编辑:

这是我为此编写的代码。

                if (!g.getVertices().isEmpty()) {

for (int i = 0; i < g.getVertices().size(); i++) {

Vertex v = g.getVertices().get(i);
Point vertexPoint = new Point(v.getX(), v.getY());

for (int j = 0; j < g.getNumberOfRegions(); j++) {

int x = g.getRegions().get(j).getX();
int y = g.getRegions().get(j).getY();
int height = g.getRegions().get(j).getHeight();
int width = g.getRegions().get(j).getWidth();

Grid regionGrid = new Grid(j+1, x, y, height, width);

Rectangle regionRectangle = new Rectangle(x, y, height, width);
if (regionRectangle.contains(vertexPoint)) {
System.out.println("Vertex " + v + " lies inside region " + regionGrid.getRegionID());
}
}

}
}

编辑2:我用它来生成区域,但我需要一种方法来为网格中的每个区域从左到右分配一个regionID。例如:

1 - 2 - 3
4 - 5 - 6
7 - 8 - 9

对于 3x3 网格。目前它的形式如下:

1 - 1 - 1
2 - 2 - 2
3 - 3 - 3

for (int i = 0; i < rowValue; i++) {

for (int j = 0; j < columnValue; j++) {

Grid r = new Grid(0, 20 + i * size, 20 + j * size, size, size);
r.setRegionID(j + 1);
g.addRegion(r);
}

}

最佳答案

检查顶点是否在正方形或圆形内部可以在 O(1) 内完成。您可以使用库函数或初等数学来完成。所以你可以创建的工作算法是 O(#vertices * #regions)。您可以尝试通过按 X 轴然后按 Y 轴对顶点和区域进行排序来进行优化,并尝试消除检查以确保返回 false。但似乎在悲观的情况下你仍然会有 O(#vertices * #regions) 时间。

关于java - 检查点数组是否位于矩形数组内?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11817227/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com