如何确定新点与两个已知二维坐标点中哪一个距离最近?(无需KNN算法)
无需KNN,简单判断新点与已知两点的最近距离
嘿,这个需求真的没必要上KNN这么重的算法——咱们用最基础的几何知识就能搞定,而且计算效率还更高!
核心思路:比较距离平方,跳过开根号
我们都知道两点间的欧几里得距离公式是:√[(x2-x1)² + (y2-y1)²],但比较两个距离的大小,完全不需要开根号!因为平方根是单调递增的函数,距离平方的大小关系和实际距离的大小关系是完全一致的。这样既能省掉浮点运算的开销,代码也更简洁。
具体实现步骤
假设我们有两个已知点:
- 点A:
(x1, y1) - 点B:
(x2, y2)
新点P:(x, y)
- 计算P到A的距离平方:
(x - x1)² + (y - y1)² - 计算P到B的距离平方:
(x - x2)² + (y - y2)² - 比较这两个平方值:
- 哪个小,就说明新点离对应的已知点更近
- 如果相等,说明新点到两个已知点的距离一样
代码示例(Python)
def get_closest_point(new_point, point_a, point_b): # 计算到A的距离平方 dist_sq_to_a = (new_point[0] - point_a[0])**2 + (new_point[1] - point_a[1])**2 # 计算到B的距离平方 dist_sq_to_b = (new_point[0] - point_b[0])**2 + (new_point[1] - point_b[1])**2 if dist_sq_to_a < dist_sq_to_b: return point_a, "新点距离点A更近" elif dist_sq_to_b < dist_sq_to_a: return point_b, "新点距离点B更近" else: return None, "新点到两个已知点的距离相等" # 测试一下 point_A = (1, 2) point_B = (4, 6) new_P = (3, 4) closest_point, result_msg = get_closest_point(new_P, point_A, point_B) print(result_msg) # 输出:新点距离点B更近
为什么这个方法比KNN好?
- 完全不需要训练模型,也不用处理数据集,就是纯几何计算
- 时间复杂度是O(1),比KNN的O(n)(n为样本数)快得多,尤其当只有两个已知点时,优势拉满
- 代码逻辑直观,几乎没有学习成本,出问题也好调试
内容的提问来源于stack exchange,提问作者MadmanLee




