3차원 벡터(또는 점)에 대한 구조체(structure)를 아래와 같이 작성할 수 있다.
<특이점>
1) 벡터의 성분은 X, Y, Z로 명백하므로 그냥 Public 변수로 설정함
2) 배열로 선언된 벡터 성분과도 호환되도록 함
– VB.NET의 Default Property를 이용함
– 사용예 :
1 2 |
Dim v1,v2 As Vector3D Dim innerProduct As Single = v1(0)*v2(0) + v1(1)*v2(1) + v1(2)*v2(2) |
구조체 소스코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
Public Structure Vector3D Public X, Y, Z As Single Public Shared ReadOnly ZeroVector As Vector3D = New Vector3D(0, 0, 0) #Region "Constructors" 'Private Sub New() 'Nothing -&gt; No default initialization 'End Sub Public Sub New(ByVal x As Single, ByVal y As Single, ByVal z As Single) Me.X = x Me.Y = y Me.Z = z End Sub Public Sub New(ByVal v As Vector3D) Me.New(v.X, v.Y, v.Z) 'copy constructor End Sub #End Region #Region "Properties" ''' ''' 배열로 선언된 벡터 성분과 호환이 되도록 작성함 ''' '''성분의 위치를 지정하는 값 0:x, 1:y, 2:z ''' 해당성분의 값 ''' 해당성분의 값 ''' ''' 왜 호환되게 했나고요? ''' c/c++로 짠 코드를 변환하다 보면, 배열로 간단하게 해결한 것들이 많아서요. ''' Default Public Property Elements(ByVal index As Short) As Single Get Dim i As Short = index Mod 3'실수를 방지하기 위해서 Select Case i Case 0 Return X Case 1 Return Y Case 2 Return Z End Select End Get Set(ByVal value As Single) Dim i As Short = index Mod 3 Select Case i Case 0 X = value Case 1 Y = value Case 2 Z = value End Select End Set End Property #End Region ''각종 Property와 Operator 등은 생략 ^^ End Class |