Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中查找矩形内的整数点?_Python_Algorithm - Fatal编程技术网

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

在Python中查找矩形内的整数点?,python,algorithm,Python,Algorithm,在二维平面中,我有一个由4个顶点定义的矩形,a,B,C和D。我现在希望找到落入矩形ABCD中的整数点(坐标为整数) 在询问之前,我所做的计算非常昂贵。简单地说,我列举了所有整数点,并检查该点是否在矩形中。我发现在我的项目中使用它太残酷了,因为我有很多观点 这应该如何优雅地完成 更新:请注意,矩形可以是随机方向,具体取决于四个点的坐标。假设放置得很好有点作弊。您可以在坐标轴上映射4个顶点。假设A(x1,y1)、B(x2,y1)、C(x1,y2)、D(x2,y2)和x1您的矩形由四条线限定。假设你有

在二维平面中,我有一个由4个顶点定义的矩形,
a
B
C
D
。我现在希望找到落入矩形
ABCD
中的整数点(坐标为整数)

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

这应该如何优雅地完成


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

您可以在坐标轴上映射4个顶点。假设A(x1,y1)、B(x2,y1)、C(x1,y2)、D(x2,y2)和x1您的矩形由四条线限定。假设你有下面的矩形

      A
      /\
     /  \
   B \   \ 
      \  /C
       \/
        D
现在画两条水平线,一条穿过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 region,循环可以如下所示(您可以为python修改它):

用于(int y=10;y>=0;y--)

对于(int x=int(y-10.5);x这就是我所做的,这在计算上非常昂贵。矩形可以小于一个角度,例如45度吗?@Evert是的。任何方向。未知。你最好问一下。你的实际问题与编程几乎没有关系。@Evert所以我标记了通用的“算法”另外,我认为它与编程有关,因为一些特定于Python的函数可能有助于优雅地解决这个问题。@mavErick从阅读《搭便车者算法指南》(Steven Skiena的算法设计手册)中关于“范围搜索”的条目开始
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 );