Chinaunix首页 | 论坛 | 博客
  • 博客访问: 191861
  • 博文数量: 53
  • 博客积分: 2015
  • 博客等级: 上尉
  • 技术积分: 546
  • 用 户 组: 普通用户
  • 注册时间: 2009-05-04 23:28
文章分类

全部博文(53)

文章存档

2012年(4)

2011年(8)

2010年(19)

2009年(22)

我的朋友

分类: C/C++

2012-08-06 21:51:24

//用于寻找两个点重合的位置


点击(此处)折叠或打开

  1. //定义arccos函数,因为VBA不能直接使用EXCEL函数
  2. Function acos(x As Double) As Double
  3.     If x >= -1 And x < -0.5 Then acos = Atn(Sqr(1 - x * x) / x) + 4 * Atn(1)
  4.     If x >= -0.5 And x <= 0.5 Then acos = -Atn(x / Sqr(1 - x * x)) + 2 * Atn(1)
  5.     If x > 0.5 And x <= 1 Then acos = Atn(Sqr(1 - x * x) / x)
  6. End Function

  7. //按照经纬度计算两点距离公式
  8. Function distance(ax As Double, ay As Double, bx As Double, by As Double)
  9.     distance = 111.12 * acos(Sin(ay) * Sin(by) + Cos(ay) * Cos(by) * Cos(ax - bx))
  10. End Function

  11. //计算比较后最近的两个点的距离
  12. Function mindis(ax As Double, ay As Double, bx As Range, by As Range)
  13.    
  14.     Dim mix As Double
  15.     mix = distance(ax, ay, bx(1), by(1))
  16.     mindis = mix
  17.     For i = 1 To 2977
  18.         mix = distance(ax, ay, bx(i), by(i))
  19.         If mix < mindis Then
  20.             mindis = mix
  21.         End If
  22.     Next
  23. End Function

  24. //返回离得最近的那个点的位置
  25. Function minpoi(ax As Double, ay As Double, bx As Range, by As Range)
  26.    
  27.     Dim mix As Double
  28.     minpoi = 1
  29.     mix = distance(ax, ay, bx(1), by(1))
  30.     temp = mix
  31.    
  32.     For i = 1 To 2977
  33.         temp = distance(ax, ay, bx(i), by(i))
  34.         If temp < mix Then
  35.             mix = temp
  36.             minpoi = i
  37.         End If
  38.     Next
  39. End Function


阅读(3701) | 评论(0) | 转发(0) |
0

上一篇:Andromnia——三星i908e启动Android系统

下一篇:没有了

给主人留下些什么吧!~~