接触VBA第一天,写了个闵可夫斯基距离
当r=1时,距离为曼哈顿距离
当r=2时,距离为欧几里得距离距离(直线距离)
当r→∞时,距离为切比雪夫距离
根据闵可夫斯基距离距离公式,在VBA写出以下代码
Public Function distance(a As Range, b As Range, Optional r As Integer = 2)
Dim i As Integer
'为支持横向数组和纵向数组的距离计算,数组长度设为“行长度和列长度两者中较大的数值”
If a.Rows.Count > a.Columns.Count Then
i = a.Rows.Count
Else
i = a.Columns.Count
End If
Dim j As Single
j = 0
Dim k As Integer
If r = 1 Then '当r=1时,距离为
For k = 1 To i
j = j + Abs(a(k) - b(k))
Next k
ElseIf r = 999 Then '当r→∞时(这里用999表示),距离为
Dim t As Single
For k = 1 To i
t = 0
t = Abs(a(k) - b(k))
If t > j Then
j = t
End If
Next k
ElseIf r = 2 Then '当r=2时,距离为
For k = 1 To i
j = j + (a(k) - b(k)) ^ 2
Next k
j = Sqr(j)
End If
distance = j
End Function
由于设置了支持横向数组和纵向数组,所以横竖数组都能运用此函数,
函数和其参数为: distance(a, b, r) 其中a和b类型为范围(即a,b两点的坐标),r的类型为整数(选择范围为1, 2, 999),下面看个例子
有一说一,感觉在VBA里写Minkowski距离实际用处不太大