首页 > 解决方案 > 检查值是否在预定义线性函数周围的特定区域内

问题描述

不幸的是,我对解决我的问题的研究没有成功,我希望你能帮助我。我为直线定义了以下线性函数

x = [298358.3258395831, 298401.1779180078]
y = [5625243.628060675, 5625347.074197255]
m, b = np.polyfit(x, y, 1)

我想检查一个数组中的值是否在这个函数周围的区域内。函数周围的区域可能如下所示:

线性函数

我找不到如何围绕这个直线函数创建一个区域的解决方案,所以我找不到如何检查数组中的点是在区域内还是在区域外的方法。

提前致谢!

标签: pythonpandasnumpy

解决方案


对于由方程给出的线ax + by + c = 0,从一点A = (x_a,y_a)到这条线的距离由以下公式给出:

dist = np.abs(a * x_a + b * y_a + c) / np.sqrt(a**2 + b**2)

来源在这里

这样,如果你有一个点数组和一个阈值,你认为你的点离你的线太远了,你可以简单地做:

array_points = ... # Format : [[x_1,y_1], [x_2,y_2],...]
a, b, c = ... # Your line's parameters here
thresh = 1e-2 # For example

def is_close_line(array, threshold) :
  array_dist = np.abs(a * array[:,0] + b * array[:,1] + c) / np.sqrt(a**2 + b**2)
  return (array_dist < threshold)

is_close_line(array_points, thresh)然后将输出一个布尔数组,其中i第 - 项表示i第 - 元素array_points是否靠近您的行。


推荐阅读