You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何确定新点与两个已知二维坐标点中哪一个距离最近?(无需KNN算法)

无需KNN,简单判断新点与已知两点的最近距离

嘿,这个需求真的没必要上KNN这么重的算法——咱们用最基础的几何知识就能搞定,而且计算效率还更高!

核心思路:比较距离平方,跳过开根号

我们都知道两点间的欧几里得距离公式是:√[(x2-x1)² + (y2-y1)²],但比较两个距离的大小,完全不需要开根号!因为平方根是单调递增的函数,距离平方的大小关系和实际距离的大小关系是完全一致的。这样既能省掉浮点运算的开销,代码也更简洁。

具体实现步骤

假设我们有两个已知点:

  • 点A:(x1, y1)
  • 点B:(x2, y2)
    新点P:(x, y)
  1. 计算P到A的距离平方(x - x1)² + (y - y1)²
  2. 计算P到B的距离平方(x - x2)² + (y - y2)²
  3. 比较这两个平方值:
    • 哪个小,就说明新点离对应的已知点更近
    • 如果相等,说明新点到两个已知点的距离一样

代码示例(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

火山引擎 最新活动