⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 module3.bas

📁 Scanin geomedia web map supermap TerraVista生成视景数据库 VirtuoZo数字摄影测量系统 集思宝G516-专业GIS数据采集器 激光测距仪手册
💻 BAS
字号:
Attribute VB_Name = "Module3"
Option Explicit
Dim ang As Single
Dim ang2 As Single
Dim lng As Single
Public Const pi = 3.141592654

Public Type Vector
    X As Single
    Y As Single
    Z As Single
End Type

Public Sub VectorSub(ByRef a As Vector, ByRef B As Vector, ByRef result As Vector)  '// result = a - b
With result
  .X = a.X - B.X
  .Y = a.Y - B.Y
  .Z = a.Z - B.Z
End With
End Sub

Public Function VectorAdd(ByRef a As Vector, ByRef B As Vector) As Vector
With VectorAdd
  .X = a.X + B.X
  .Y = a.Y + B.Y
  .Z = a.Z + B.Z
End With
End Function

Public Function Vectorscale(ByRef a As Vector, sd As Single) As Vector

Vectorscale.X = a.X * sd
Vectorscale.Y = a.Y * sd
Vectorscale.Z = a.Z * sd
  
End Function

Public Function VectorDot(ByRef a As Vector, ByRef B As Vector) As Single
With a
  VectorDot = (.X * B.X) + (.Y * B.Y) + (.Z * B.Z)
End With
End Function

Public Sub VectorCross(ByRef a As Vector, ByRef B As Vector, ByRef result As Vector)
result.X = a.Y * B.Z - a.Z * B.Y
result.Y = a.Z * B.X - a.X * B.Z
result.Z = a.X * B.Y - a.Y * B.X
End Sub


Public Sub VectorNormalize(ByRef V As Vector)
Dim sngScaleFactor As Single
With V
  sngScaleFactor = 1 / Sqr((.X * .X) + (.Y * .Y) + (.Z * .Z))
  .X = .X * sngScaleFactor
  .Y = .Y * sngScaleFactor
  .Z = .Z * sngScaleFactor
End With
End Sub

Public Function VectorLength(ByRef a As Vector) As Single
With a
  VectorLength = Sqr((.X * .X) + (.Y * .Y) + (.Z * .Z))
End With
End Function

Public Function VectorRollz(ByRef a As Vector, an As Single) As Single
lng = Sqr(a.X * a.X + a.Y * a.Y)
If a.X <> 0 Then ang = Atn(a.Y / a.X)
If a.X < 0 Then
  ang = pi + ang
End If
ang = ang + an
a.X = lng * Cos(ang)
a.Y = lng * Sin(ang)
End Function

Public Function VectorRollx(ByRef a As Vector, an As Single) As Single
lng = Sqr(a.Z * a.Z + a.Y * a.Y)
If a.Y <> 0 Then ang = Atn(a.Z / a.Y)
If a.Y < 0 Then
  ang = pi + ang
End If
ang = ang + an
a.Y = lng * Cos(ang)
a.Z = lng * Sin(ang)
End Function

Public Function VectorRolly(ByRef a As Vector, an As Single) As Single
lng = Sqr(a.X * a.X + a.Z * a.Z)
If a.Z <> 0 Then ang = Atn(a.X / a.Z)
If a.Z < 0 Then
  ang = pi + ang
End If
ang = ang + an
a.Z = lng * Cos(ang)
a.X = lng * Sin(ang)
End Function

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -