Python实现三种常见距离测量算法:欧式、街区与棋盘距离

山海之间
山海之间
发布时间:2026-10-13 | 1人浏览过
原创

本文介绍Python中三种基础的距离测量方式:欧式距离、街区距离和棋盘距离。详细解析了各自的数学公式及其在路径规划(如A*算法)中的应用场景,并通过Python代码示例直观展示不同距离度量生成的几何区域形状,帮助开发者理解距离概念在算法中的实际作用。

撰写本文的初衷在于帮助读者建立对距离概念的直观理解。尽管这是计算机科学中的基础知识,但正如千里之行始于足下,它是许多高级路径搜索算法(例如A*算法)不可或缺的核心组件。

在计算机图形学和路径规划中,主要存在三种距离测量方式。

第一种是欧式距离(Euclidean Distance),这是最常用且最符合几何直观的距离度量方式。

其计算公式为:((x1-x2)^2 + (y1-y2)^2)^0.5

基于该公式计算出的等距点集合,会形成一个圆形的原型区域。

#设起始坐标是原点,即(0,0)
y_result = []
for y in range(10,-10,-1):
 x_result = []
 for x in range(-10,10,1):
  #((0-x)**2 + (0-y)**2)**0.5
  if ((0-x)**2 + (0-y)**2)**0.5 <= 9:
   x_result.append('*')
  else:
   x_result.append(' ')
 y_result.append(''.join(x_result))

for i in y_result:
 print i

第二种是街区距离(Manhattan Distance),这种度量方式在游戏开发中应用广泛。之所以被称为“街区”距离,是因为西方城市的街道布局通常呈现东南、东北、西南、西北的网格状走向,移动必须沿街道平行或垂直进行。

其计算公式为:|x1-x2| + |y1-y2|

使用该公式计算出的等距点集合,会形成一个菱形的区域。

#设起始坐标是原点,即(0,0)
y_result = []
for y in range(10,-10,-1):
 x_result = []
 for x in range(-10,10,1):
  #(abs(0-x) + abs(0-y))
  if (abs(0-x) + abs(0-y)) <= 9:
   x_result.append('*')
  else:
   x_result.append(' ')
 y_result.append(''.join(x_result))

for i in y_result:
 print i

第三种是棋盘距离(Chebyshev Distance),其概念较为直观,类似于国际象棋棋盘上的方格移动。

其计算公式为:max(|x1-x2|, |y1-y2|)

基于该公式计算出的等距点集合,会形成一个正方形的区域。

#设起始坐标是原点,即(0,0)
y_result = []
for y in range(10,-10,-1):
 x_result = []
 for x in range(-10,10,1):
  #max(abs(0-x),abs(0-y))
  if max(abs(0-x),abs(0-y)) <= 9:
   x_result.append('*')
  else:
   x_result.append(' ')
 y_result.append(''.join(x_result))

for i in y_result:
 print i

以上即为本文关于Python中三种距离测量方法的全部内容,希望能为读者的学习提供有益的帮助,也欢迎大家继续支持本站。

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表