numpy arctan函数镜像角度

时间:2019-04-08 19:02:01

标签: python numpy

问题:数据点有一个坐标网格,需要将它们过滤到特定的弯曲区域。

解决方案:

  • 如何确定面积?

    • 在一个网格内,将在该网格上为您指定一个特定点(A), 从该点开始的角度(相对于网格确定)

    • 您还将在网格内获得目标点(B)

    • 从点(A)绘制2个不同的特定半径的圆

    • 标记一个与给定角度的任意一侧成45度角的区域

    • 评估网格上的每个点是否在2个圆和90度截面所限制的区域内

问题出在我的解决方案上:不是过滤1个区域,而是过滤2个镜像区域,从而允许错误的数据。

网格上的每个点是否适合过滤区域,都可以通过下面的函数进行评估。我研究了arctan2函数,看它是否有帮助,但不了解。可以找到问题的完整摘要here

以下是一些说明图片:

What this should look likewhat this code looks like in practice以及some testable data

def pertenece(x,y,x_pala,y_pala,alpha):
    #parametros R int y R ext
    R_int = 17
    R_ext = 25
    #def thetas
    Theta_min = (alpha - 45)*(180/m.pi)**-1
    Theta_max = (alpha + 45)*(180/m.pi)**-1

    #calc R punto y Theta punto
    R_punto = ((x-x_pala)**2 + (y-y_pala)**2)**0.5
    Theta_punto = np.arctan((y-y_pala)/(x-x_pala))

    if (R_punto >= R_int and R_punto<=R_ext) and (Theta_punto >= Theta_min and Theta_punto<=Theta_max):
        return True
    else:
        return False

从文档中可以看出,应该只过滤掉一个象限,实际上只有2个象限。

1 个答案:

答案 0 :(得分:0)

您确实应该使用np.arctan2,因为否则它无法区分不同符号的输入。例如,np.arctan(1 / 2)np.arctan(-1 / -2)相同,因为参数相同。因此,您将同时保留(-,-)(+,+)象限。对于np.arctan2,您只需将两个坐标作为单独的参数传递,以便算法可以从两个参数的符号中找出象限。因此,您应该计算以下内容:

Theta_punto = np.arctan2((y-y_pala), (x-x_pala))