在Python中查找矩形内的整数点?

时间:2013-10-16 10:04:26

标签: python algorithm

在2D平面中,我有一个由4个顶点ABCD定义的矩形。我现在希望找到属于矩形ABCD的整数点(坐标是整数)。

在询问之前,我所做的是非常昂贵的计算。简而言之,我正在枚举所有整数点并检查该点是否在矩形中。我发现在我的项目中使用它太残酷了,因为我有很多观点。

如何优雅地完成这项工作?

更新:请注意,矩形可以是随机方向,具体取决于四个点的坐标。假设位置很好,有点作弊。

2 个答案:

答案 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。