vector3d.cls

来自「《MATLAB实用指南》系列丛书DE源代码」· CLS 代码 · 共 147 行

CLS
147
字号
VERSION 1.0 CLASS
BEGIN
  MultiUse = -1  'True
  Persistable = 0  'NotPersistable
  DataBindingBehavior = 0  'vbNone
  DataSourceBehavior  = 0  'vbNone
  MTSTransactionMode  = 0  'NotAnMTSObject
END
Attribute VB_Name = "Vector3D"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = True
Attribute VB_PredeclaredId = False
Attribute VB_Exposed = True
Option Explicit

Private mdblX As Double
Private mdblY As Double
Private mdblZ As Double

Public Property Let z(ByVal vData As Double)
  mdblZ = vData
End Property

Public Property Get z() As Double
  z = mdblZ
End Property

Public Property Let y(ByVal vData As Double)
  mdblY = vData
End Property

Public Property Get y() As Double
  y = mdblY
End Property

Public Property Let x(ByVal vData As Double)
  mdblX = vData
End Property

Public Property Get x() As Double
  x = mdblX
End Property

'归一化
Public Sub Normalize()
  Dim dblLen As Double
  dblLen = GetLength
  mdblX = mdblX / dblLen
  mdblY = mdblY / dblLen
  mdblZ = mdblZ / dblLen
End Sub

'获取归一化向量
Public Function GetNormal() As Vector3D
  Dim dblLen As Double
  dblLen = GetLength
  GetNormal.x = mdblX / dblLen
  GetNormal.y = mdblY / dblLen
  GetNormal.z = mdblZ / dblLen
End Function

'获取向量在ZX面上的投影长度
Public Function GetLengthZX() As Double
  GetLengthZX = Sqr(mdblZ * mdblZ + mdblX * mdblX)
End Function

'获取向量在YZ面上的投影长度
Public Function GetLengthYZ() As Double
  GetLengthYZ = Sqr(mdblY * mdblY + mdblZ * mdblZ)
End Function

'获取向量在XY面上的投影长度
Public Function GetLengthXY() As Double
  GetLengthXY = Sqr(mdblX * mdblX + mdblY * mdblY)
End Function

'获取向量的长度
Public Function GetLength() As Double
  GetLength = Sqr(mdblX * mdblX + mdblY * mdblY + mdblZ * mdblZ)
End Function

'向量除以常数
Public Function Devide(dblC As Double) As Vector3D
  Dim vctD As Vector3D
  Set vctD = New Vector3D
  
  vctD.x = mdblX / dblC
  vctD.y = mdblY / dblC
  vctD.z = mdblZ / dblC
  
  Set Devide = vctD
End Function

'向量点乘
Public Function MultDot(vctV As Vector3D) As Double
  MultDot = mdblX * vctV.x + mdblY * vctV.y + mdblZ * vctV.z
End Function

'向量叉乘
Public Function MultCross(vctV As Vector3D) As Vector3D
  Dim vctM As Vector3D
  Set vctM = New Vector3D
  
  vctM.x = mdblY * vctV.z - vctV.y * mdblZ
  vctM.y = mdblZ * vctV.x - vctV.z * mdblX
  vctM.z = mdblX * vctV.y - vctV.x * mdblY
  
  Set MultCross = vctM
End Function

'向量乘以常数
Public Function MultCon(dblC As Double) As Vector3D
  Dim vctM As Vector3D
  Set vctM = New Vector3D
  
  vctM.x = mdblX * dblC
  vctM.y = mdblY * dblC
  vctM.z = mdblZ * dblC
  
  Set MultCon = vctM
End Function

'向量相减
Public Function Subtract(vctV As Vector3D) As Vector3D
  Dim vctS As Vector3D
  Set vctS = New Vector3D
  
  vctS.x = mdblX - vctV.x
  vctS.y = mdblY - vctV.y
  vctS.z = mdblZ - vctV.z
  
  Set Subtract = vctS
End Function

'向量相加
Public Function Add(vctV As Vector3D) As Vector3D
  Dim vctA As Vector3D
  Set vctA = New Vector3D
  
  vctA.x = mdblX + vctV.x
  vctA.y = mdblY + vctV.y
  vctA.z = mdblZ + vctV.z
  
  Set Add = vctA
End Function

⌨️ 快捷键说明

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