问题:数据点有一个坐标网格,需要将它们过滤到特定的弯曲区域。
解决方案:
如何确定面积?
在一个网格内,将在该网格上为您指定一个特定点(A), 从该点开始的角度(相对于网格确定)
您还将在网格内获得目标点(B)
从点(A)绘制2个不同的特定半径的圆
标记一个与给定角度的任意一侧成45度角的区域
评估网格上的每个点是否在2个圆和90度截面所限制的区域内
问题出在我的解决方案上:不是过滤1个区域,而是过滤2个镜像区域,从而允许错误的数据。
网格上的每个点是否适合过滤区域,都可以通过下面的函数进行评估。我研究了arctan2函数,看它是否有帮助,但不了解。可以找到问题的完整摘要here
以下是一些说明图片:
What this should look like,what 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个象限。
答案 0 :(得分:0)
您确实应该使用np.arctan2
,因为否则它无法区分不同符号的输入。例如,np.arctan(1 / 2)
与np.arctan(-1 / -2)
相同,因为参数相同。因此,您将同时保留(-,-)
和(+,+)
象限。对于np.arctan2
,您只需将两个坐标作为单独的参数传递,以便算法可以从两个参数的符号中找出象限。因此,您应该计算以下内容:
Theta_punto = np.arctan2((y-y_pala), (x-x_pala))