Листинг 38.5. Два новых класса.
'Вводим класс с методами преобразования систем координат
'в трехмерном пространстве:
Public Class myClassPoint3D
'Массив из 4-х элементов для первоначальных координат
'(original coordinates); нулевой индекс используем:
Public orig_coord(3) As Double
'Массив для преобразованных координат
'(transformed coordinates):
Public trans_coord(3) As Double
'Создаем новый неинициализированный вектор:
Public Sub New()
End Sub
'Создаем новый инициализированный вектор:
Public Sub New(ByVal x As Double, ByVal y As Double, _
ByVal z As Double, Optional ByVal myScale As Double = 1)
orig_coord(0) = x
orig_coord(1) = y
orig_coord(2) = z
orig_coord(3) = myScale
End Sub
'Матрица преобразования (transformation matrix):
Public Function Transformation( _
ByVal matrix As myClassMatrix3D, _
Optional ByVal normalize As Boolean = True) _
As myClassPoint3D
Dim value As Double
Dim result As New myClassPoint3D
For i As Integer = 0 To 3
value = 0
For j As Integer = 0 To 3
value = value + _
orig_coord(j) * matrix.M(j, i)
Next
trans_coord(i) = value
Next
'Повторно нормализуем точку:
If normalize Then
'После выхода из цикла value = trans_coord(3):
trans_coord(0) = trans_coord(0) / value
trans_coord(1) = trans_coord(1) / value
trans_coord(2) = trans_coord(2) / value
trans_coord(3) = 1
End If
End Function
End Class
'Вводим класс с методами преобразования координат точки
'в трехмерном пространстве:
Public Class myClassMatrix3D
'Матрица (matrix) в виде массива размера 4x4:
Public M(3, 3) As Double
'Создаем новую неинициализированную матрицу:
Public Sub New()
End Sub
'Создаем новую инициализированную матрицу: