Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.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_Arrays_Rotation_Detection_Overlap - Fatal编程技术网

Python 探测器系统中旋转正方形重叠的确定

Python 探测器系统中旋转正方形重叠的确定,python,arrays,rotation,detection,overlap,Python,Arrays,Rotation,Detection,Overlap,我正在研究一个问题,需要计算两个正方形的重叠面积。 这是一个程序的一部分,该程序将一个由多个方形探测器单元/像素阵列组成的旋转探测器放置在由多个较小方形像素组成的输入地图的顶部,并确定探测器像素检测到的每个输入像素的光线百分比。 我尝试过几何方法,但是有太多可能的变化需要解释 与另一个正方形相比,一个正方形可以旋转任意角度,并且两个正方形可以有不同的大小。给定的参数是输入地图上检测器像素的中心坐标、检测器像素的大小默认等于1以及旋转角度 编辑:添加草图以进行澄清 所以我要做的是计算每个输入像素的

我正在研究一个问题,需要计算两个正方形的重叠面积。 这是一个程序的一部分,该程序将一个由多个方形探测器单元/像素阵列组成的旋转探测器放置在由多个较小方形像素组成的输入地图的顶部,并确定探测器像素检测到的每个输入像素的光线百分比。 我尝试过几何方法,但是有太多可能的变化需要解释

与另一个正方形相比,一个正方形可以旋转任意角度,并且两个正方形可以有不同的大小。给定的参数是输入地图上检测器像素的中心坐标、检测器像素的大小默认等于1以及旋转角度

编辑:添加草图以进行澄清

所以我要做的是计算每个输入像素的部分黑方,它位于一个给定的检测器像素红方内,可以是0到1之间的任何地方。 然后将其与输入像素的值相乘,并在所有输入像素上求和,以计算探测器像素收集的总光


我尝试使用的几何方法是计算探测器像素边缘的斜率,并使用与输入像素边缘的相交来计算总重叠。

如果我理解正确,您所做的工作就相当于在灰度位图上查找重叠的正方形?如果是这样,您可以进行角点检测,并尝试从检测到的角点生成正方形,然后计算检测到的正方形上的重叠吗?此opencv示例可能是一个很好的起点:


例如,如果我误解了旋转角度的问题,请提前道歉。

如果我正确理解您的意思,您所做的工作就相当于在灰度位图上查找重叠的正方形?如果是这样,您可以进行角点检测,并尝试从检测到的角点生成正方形,然后计算检测到的正方形上的重叠吗?此opencv示例可能是一个很好的起点:


如果我误解了这个问题,请提前道歉。例如,我被旋转角度弄糊涂了。

以下是我将使用的步骤

确保两个正方形的角都有坐标。 选择任意一个方块 旋转两个正方形角的坐标,以便在步骤1中拾取的正方形的边平行于x轴和y轴 检查另一个正方形的角是否在第一个正方形内。由于旋转,这就像检查x坐标是否在左侧和右侧之间,y坐标是否在顶部和底部之间一样简单。 要旋转这些点,您将使用如下函数:

from math import sin, cos, radians

def rotate_points(x, y, angle):
    """Rotate a set of points `angle` degrees counterclockwise about
    the origin.
    """
    theta = radians(angle)
    x_prime = x * cos(theta) - y * sin(theta)
    y_prime = x * sin(theta) + y * cos(theta)
    return x_prime, y_prime

以下是我将使用的步骤

确保两个正方形的角都有坐标。 选择任意一个方块 旋转两个正方形角的坐标,以便在步骤1中拾取的正方形的边平行于x轴和y轴 检查另一个正方形的角是否在第一个正方形内。由于旋转,这就像检查x坐标是否在左侧和右侧之间,y坐标是否在顶部和底部之间一样简单。 要旋转这些点,您将使用如下函数:

from math import sin, cos, radians

def rotate_points(x, y, angle):
    """Rotate a set of points `angle` degrees counterclockwise about
    the origin.
    """
    theta = radians(angle)
    x_prime = x * cos(theta) - y * sin(theta)
    y_prime = x * sin(theta) + y * cos(theta)
    return x_prime, y_prime

这确实会检查是否有可能的重叠,但是我需要能够计算总重叠。这确实会检查是否有可能的重叠,但是我需要能够计算总重叠。不是真的。我已经添加了一个问题的草图,以澄清旋转角度等。不是真的。我添加了一个问题的草图,以澄清旋转角度等。