Python实现三种常见距离测量算法:欧式、街区与棋盘距离
本文介绍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中三种距离测量方法的全部内容,希望能为读者的学习提供有益的帮助,也欢迎大家继续支持本站。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









