在二维平面中,我有一个由 4 个顶点、、A
和定义的矩形。我现在希望找到落入 rectangle 的整数点(坐标是整数)。B
C
D
ABCD
在问之前,我所做的计算非常昂贵。简而言之,我正在枚举所有整数点并检查该点是否在矩形中。我发现在我的项目中使用它太残酷了,因为我有很多观点。
这应该如何优雅地完成?
更新:请注意,矩形可以是随机方向,具体取决于四个点的坐标。假设位置很好有点作弊。
您的矩形应以四线为界。假设您有以下矩形
A
/\
/ \
B \ \
\ /C
\/
D
现在画两条水平线,一条穿过 B,另一条穿过 C。这将矩形分成 3 个区域。
A
/\
/__\P
B \___\
Q\ /C
\/
D
所有三个区域都由 2 组不同的线定义。
Top: AB to AP.
Middle: BQ to PC.
Bottom: QD to CD.
对于这些区域中的每一个,迭代满足边界线条件的 x 和 y 的整数值。比如A、B、D、C点分别是(0,10.5)、(-10.5, 0)、(0, -10.5)、(10.5, 0),一个旋转的正方形,
应该只有1条水平线(X 轴)。
对于 Top 区域,循环可以如下所示(您可以为 python 修改它):
for ( int y = 10; y >= 0; y-- )
for ( int x = int(y-10.5); x <= int(10.5-y); x++ ) // the int an be changed to floor or ceiling.
print( x, y );
复杂度顺序:O(N),其中 N 是整数点的数量。
您可以在坐标轴上映射 4 个顶点。假设 A(x1, y1),B(x2, y1), C(x1, y2),D(x2, y2) 和 x1 <= x2 && y1 <= y2,当且仅当 x1<= x <= x2 和 y1 <= y <= y2,点 p(x,y) 落入矩形 ABCD。