在2D平面中,我有一个由4个顶点A
,B
,C
和D
定义的矩形。我现在希望找到属于矩形ABCD
的整数点(坐标是整数)。
在询问之前,我所做的是非常昂贵的计算。简而言之,我正在枚举所有整数点并检查该点是否在矩形中。我发现在我的项目中使用它太残酷了,因为我有很多观点。
如何优雅地完成这项工作?
更新:请注意,矩形可以是随机方向,具体取决于四个点的坐标。假设位置很好,有点作弊。
答案 0 :(得分:2)
你的矩形应以四条线为界。假设您有以下矩形
A
/\
/ \
B \ \
\ /C
\/
D
现在绘制2条水平线,一条穿过B,另一条穿过C.这将矩形划分为3个区域。
A
/\
/__\P
B \___\
Q\ /C
\/
D
所有三个区域都由两组不同的线条定义。
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),则旋转方形,
只有一条水平线(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是整数点数。
答案 1 :(得分:0)
您可以在坐标轴上映射4个顶点。假设A(x1,y1),B(x2,y1),C(x1,y2),D(x2,y2)和x1 <= x2&amp;&amp; y1&lt; = y2,当且仅当x1 <= x&lt; = x2且y1&lt; = y&lt; = y2时,点p(x,y)落入矩形ABCD。