'求方位角 Public Function CalcAzimuth(ByVal dx1 As Double, ByVal dy1 As Double, ByVal dx2 As Double, ByVal dy2 As Double) As Double Dim da, dy21, dx21 As Double dy21 = dy2 - dy1 dx21 = dx2 - dx1 da = Application.WorksheetFunction.Atan2(Abs(dx21), Abs(dy21)) * 180# / dPI If dy21 > 0 And dx21 < 0 Then da = 180 - da ElseIf dy21 < 0 And dx21 < 0 Then da = 180 + da ElseIf dy21 < 0 And dx21 > 0 Then da = 360 - da End If da = da / 180 * dPI '换成弧度 If da > 2 * dPI Then da = da - 2 * dPI CalcAzimuth = da End Function '根据测站点坐标、后视点坐标、放样点坐标,算出放样夹角 Public Function CalcAng(ByVal dXcz As Double, ByVal dYcz As Double, _ ByVal dXhs As Double, ByVal dYhs As Double, _ ByVal dXXi As Double, ByVal dYYi) dPI = Application.WorksheetFunction.Pi Dim dAng, dd, dm, ds As Double '算出夹角 dAng = CalcAzimuth(dXXi, dYYi, dXcz, dYcz) - CalcAzimuth(dXhs, dYhs, dXcz, dYcz) '夹角 If dAng < 0 Then dAng = dAng + 2# * dPI dAng = dAng * 180# / dPI '划算成度 '化算成 dd.mmsss dd = Int(dAng) dm = Int((dAng - dd) * 60#) ds = ((dAng - dd) * 60# - dm) * 60# dAng = dd + dm / 100# + ds / 10000# CalcAng = dAng End Function解释各行代码
时间: 2024-01-03 11:05:50 浏览: 431
这段代码是使用VB语言编写的计算方位角和夹角的函数。下面对每行代码进行解释:
```
Public Function CalcAzimuth(ByVal dx1 As Double, ByVal dy1 As Double, ByVal dx2 As Double, ByVal dy2 As Double) As Double
```
定义一个名为CalcAzimuth的公共函数,用于计算方位角。函数有四个参数dx1、dy1、dx2、dy2,分别表示两个点的横纵坐标。
```
Dim da, dy21, dx21 As Double
```
定义三个变量,da用于保存计算结果,dy21和dx21分别表示两个点的纵横坐标之差。
```
dy21 = dy2 - dy1
dx21 = dx2 - dx1
```
计算两个点的纵横坐标之差。
```
da = Application.WorksheetFunction.Atan2(Abs(dx21), Abs(dy21)) * 180# / dPI
```
使用Atan2函数计算方位角,并将结果转换为角度制。
```
If dy21 > 0 And dx21 < 0 Then da = 180 - da
ElseIf dy21 < 0 And dx21 < 0 Then da = 180 + da
ElseIf dy21 < 0 And dx21 > 0 Then da = 360 - da
End If
```
根据两个点的位置关系调整计算结果。
```
da = da / 180 * dPI '换成弧度
```
将计算结果转换为弧度制。
```
If da > 2 * dPI Then da = da - 2 * dPI
```
如果计算结果超出了2π,则减去2π。
```
CalcAzimuth = da
```
将计算结果作为函数返回值。
```
Public Function CalcAng(ByVal dXcz As Double, ByVal dYcz As Double, ByVal dXhs As Double, ByVal dYhs As Double, ByVal dXXi As Double, ByVal dYYi)
```
定义一个名为CalcAng的公共函数,用于计算放样夹角。函数有六个参数,分别表示测站点、后视点和放样点的横纵坐标。
```
dPI = Application.WorksheetFunction.Pi
```
定义π的值。
```
Dim dAng, dd, dm, ds As Double
```
定义四个变量,dAng用于保存计算结果,dd、dm、ds分别表示度、分、秒。
```
dAng = CalcAzimuth(dXXi, dYYi, dXcz, dYcz) - CalcAzimuth(dXhs, dYhs, dXcz, dYcz)
```
计算两个方位角之差,即夹角。
```
If dAng < 0 Then dAng = dAng + 2# * dPI
```
如果夹角小于0,则加上2π。
```
dAng = dAng * 180# / dPI '划算成度
```
将夹角转换为角度制。
```
dd = Int(dAng)
dm = Int((dAng - dd) * 60#)
ds = ((dAng - dd) * 60# - dm) * 60#
```
将夹角转换为dd.mmsss的格式。
```
dAng = dd + dm / 100# + ds / 10000#
```
将夹角转换为十进制度数。
```
CalcAng = dAng
```
将计算结果作为函数返回值。
阅读全文