曼哈顿距离(Manhattan)

定义

曼哈顿距离:两点在南北方向上的距离加上在东西方向上的距离;对于一个具有正南正北、正东正西方向规则布局的城镇街道,从一点到达另一点的距离正是在南北方向上旅行的距离加上在东西方向上旅行的距离,因此,曼哈顿距离又称为出租车距离。曼哈顿距离不是距离不变量,当坐标轴变动时,点间的距离就会不同。
如下图,在曼哈顿街区要从一个十字路口开车到另一个十字路口,驾驶距离显然不是两点间的直线距离。这个实际驾驶距离就是“曼哈顿距离”。曼哈顿距离也称为“城市街区距离”(City Block distance)。图中红线代表曼哈顿距离,绿色代表欧氏距离(直线距离),蓝色和黄色代表等价的曼哈顿距离。
在这里插入图片描述

计算公式

曼哈顿距离:为所有维度距离绝对值之和

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

举例

设空间坐标为A ( 1 , 2 , 3 )与 B ( 3 , 5 , 7 ) 两点,计算 点A 和B的曼哈顿距离为:
在这里插入图片描述

曼哈顿距离Manhattan Distance)是一种常用的距离度量方法,特别适用于网格状路径。它计算的是两个点在标准坐标系下各维度差的绝对值之和。曼哈顿距离在路径规划、游戏开发和机器学习等领域有广泛应用。 在C#中,可以通过以下方式实现曼哈顿距离: ```csharp using System; public class ManhattanDistanceCalculator { /// <summary> /// 计算两个点的曼哈顿距离 /// </summary> /// <param name="point1">第一个点的坐标</param> /// <param name="point2">第二个点的坐标</param> /// <returns>曼哈顿距离</returns> public static double Calculate(double[] point1, double[] point2) { if (point1.Length != point2.Length) throw new ArgumentException("两个点的维度必须相同"); double distance = 0; for (int i = 0; i < point1.Length; i++) { distance += Math.Abs(point1[i] - point2[i]); } return distance; } } class Program { static void Main(string[] args) { double[] pointA = { 3, 4, 5 }; double[] pointB = { 1, 2, 3 }; double distance = ManhattanDistanceCalculator.Calculate(pointA, pointB); Console.WriteLine($"曼哈顿距离为: {distance}"); } } ``` 这段代码定义了一个`ManhattanDistanceCalculator`类,其中包含一个静态方法`Calculate`用于计算曼哈顿距离。`Main`方法中创建了两个点,并计算它们之间的曼哈顿距离曼哈顿距离的特点是它只计算直角距离,不考虑对角线距离。这使得它在某些特定场景下比欧几里得距离更适用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值