Hallo Forum, ich dachte ich schreibe mal drei Strukturen zu Vektoren (Vector2D, Vector3D, Vector4D).
Ich habe folgende Funktionen eingebaut:
Operatoren:
- * (Vector & Double)
- * (Double & Vector)
- / (Vector & Double)
- + (Vector & Vector)
- - (Vector & Vector)
Eigenschaften (alle Datentyp Double):
Vector2D:
- X
- Y
- Length
Vector3D:
- X
- Y
- Z
- Length
Vector4D:
- X
- Y
- Z
- W
- Length
Subs:
- New (Konstruktor)
Functions:
- Normalize
- ScalarProduct
- IsOrthogonal
- ToString
- CrossProduct (bei Vector3D)
Es sind also nur die wichtigsten Funktionen, damit man aber sieht wie man Vektoren in Visual Basic umsetzen kann, reicht es hoffentlich.
Spoiler anzeigen
Ich habe folgende Funktionen eingebaut:
Operatoren:
- * (Vector & Double)
- * (Double & Vector)
- / (Vector & Double)
- + (Vector & Vector)
- - (Vector & Vector)
Eigenschaften (alle Datentyp Double):
Vector2D:
- X
- Y
- Length
Vector3D:
- X
- Y
- Z
- Length
Vector4D:
- X
- Y
- Z
- W
- Length
Subs:
- New (Konstruktor)
Functions:
- Normalize
- ScalarProduct
- IsOrthogonal
- ToString
- CrossProduct (bei Vector3D)
Es sind also nur die wichtigsten Funktionen, damit man aber sieht wie man Vektoren in Visual Basic umsetzen kann, reicht es hoffentlich.
VB.NET-Quellcode
- Option Strict On
- Imports System.Math
- Public Structure Vector2D
- Public Sub New(ByVal xx As Double, ByVal yy As Double)
- X = xx
- Y = yy
- End Sub
- Public Property X() As Double
- Public Property Y() As Double
- Public ReadOnly Property Length() As Double
- Get
- Return Sqrt(Pow(X, 2) + Pow(Y, 2))
- End Get
- End Property
- Public Shared Operator +(ByVal v1 As Vector2D, ByVal v2 As Vector2D) As Vector2D
- Return New Vector2D(v1.X + v2.X, v1.Y + v2.Y)
- End Operator
- Public Shared Operator -(ByVal v1 As Vector2D, ByVal v2 As Vector2D) As Vector2D
- Return New Vector2D(v1.X - v2.X, v1.Y - v2.Y)
- End Operator
- Public Shared Operator *(ByVal v1 As Vector2D, ByVal d As Double) As Vector2D
- Return New Vector2D(v1.X * d, v1.Y * d)
- End Operator
- Public Shared Operator *(ByVal d As Double, ByVal v1 As Vector2D) As Vector2D
- Return New Vector2D(v1.X * d, v1.Y * d)
- End Operator
- Public Shared Operator /(ByVal v1 As Vector2D, ByVal d As Double) As Vector2D
- Return New Vector2D(v1.X / d, v1.Y / d)
- End Operator
- Public Overrides Function ToString() As String
- Return String.Format("({0},{1})", x, y)
- End Function
- Public Shared Function Normalize(ByVal v1 As Vector2D) As Vector2D
- Return v1 / v1.Length
- End Function
- Public Shared Function ScalarProduct(ByVal v1 As Vector2D, ByVal v2 As Vector2D) As Double
- Return v1.X * v2.X + v1.Y * v2.Y
- End Function
- Public Shared Function IsOrthogonal(ByVal v1 As Vector2D, ByVal v2 As Vector2D) As Boolean
- If Double.Equals(ScalarProduct(v1, v2), 0) Then Return True
- Return False
- End Function
- End Structure
- Public Structure Vector3D
- Public Sub New(ByVal xx As Double, ByVal yy As Double, ByVal zz As Double)
- X = xx
- Y = yy
- Z = zz
- End Sub
- Public Property X() As Double
- Public Property Y() As Double
- Public Property Z() As Double
- Public ReadOnly Property Length() As Double
- Get
- Return Sqrt(Pow(X, 2) + Pow(Y, 2) + Pow(Z, 2))
- End Get
- End Property
- Public Shared Operator +(ByVal v1 As Vector3D, ByVal v2 As Vector3D) As Vector3D
- Return New Vector3D(v1.X + v2.X, v1.Y + v2.Y, v1.Z + v2.Z)
- End Operator
- Public Shared Operator -(ByVal v1 As Vector3D, ByVal v2 As Vector3D) As Vector3D
- Return New Vector3D(v1.X - v2.X, v1.Y - v2.Y, v1.Z - v2.Z)
- End Operator
- Public Shared Operator *(ByVal v1 As Vector3D, ByVal d As Double) As Vector3D
- Return New Vector3D(v1.X * d, v1.Y * d, v1.Z * d)
- End Operator
- Public Shared Operator *(ByVal d As Double, ByVal v1 As Vector3D) As Vector3D
- Return New Vector3D(v1.X * d, v1.Y * d, v1.Z * d)
- End Operator
- Public Shared Operator /(ByVal v1 As Vector3D, ByVal d As Double) As Vector3D
- Return New Vector3D(v1.X / d, v1.Y / d, v1.Z / d)
- End Operator
- Public Overrides Function ToString() As String
- Return String.Format("({0},{1},{2})", X, Y, Z)
- End Function
- Public Shared Function Normalize(ByVal v1 As Vector3D) As Vector3D
- Return v1 / v1.Length
- End Function
- Public Shared Function ScalarProduct(ByVal v1 As Vector3D, ByVal v2 As Vector3D) As Double
- Return v1.X * v2.X + v1.Y * v2.Y + v1.Z * v2.Z
- End Function
- Public Shared Function IsOrthogonal(ByVal v1 As Vector3D, ByVal v2 As Vector3D) As Boolean
- If Double.Equals(ScalarProduct(v1, v2), 0) Then Return True
- Return False
- End Function
- Public Shared Function CrossProdukct(ByVal v1 As Vector3D, ByVal v2 As Vector3D) As Vector3D
- Return New Vector3D(v1.Y * v2.Z - v1.Z * v2.Y, v1.Z * v2.X - v1.X * v2.Z, v1.X * v2.Y - v1.Y * v2.X)
- End Function
- End Structure
- Public Structure Vector4D
- Public Sub New(ByVal xx As Double, ByVal yy As Double, ByVal zz As Double, ByVal ww As Double)
- X = xx
- Y = yy
- Z = zz
- W = ww
- End Sub
- Public Property X() As Double
- Public Property Y() As Double
- Public Property Z() As Double
- Public Property W() As Double
- Public ReadOnly Property Length() As Double
- Get
- Return Sqrt(Pow(X, 2) + Pow(Y, 2) + Pow(Z, 2) + Pow(W, 2))
- End Get
- End Property
- Public Shared Operator +(ByVal v1 As Vector4D, ByVal v2 As Vector4D) As Vector4D
- Return New Vector4D(v1.X + v2.X, v1.Y + v2.Y, v1.Z + v2.Z, v1.W + v2.W)
- End Operator
- Public Shared Operator -(ByVal v1 As Vector4D, ByVal v2 As Vector4D) As Vector4D
- Return New Vector4D(v1.X - v2.X, v1.Y - v2.Y, v1.Z - v2.Z, v1.W - v2.W)
- End Operator
- Public Shared Operator *(ByVal v1 As Vector4D, ByVal d As Double) As Vector4D
- Return New Vector4D(v1.X * d, v1.Y * d, v1.Z * d, v1.W * d)
- End Operator
- Public Shared Operator *(ByVal d As Double, ByVal v1 As Vector4D) As Vector4D
- Return New Vector4D(v1.X * d, v1.Y * d, v1.Z * d, v1.W * d)
- End Operator
- Public Shared Operator /(ByVal v1 As Vector4D, ByVal d As Double) As Vector4D
- Return New Vector4D(v1.X / d, v1.Y / d, v1.Z / d, v1.W / d)
- End Operator
- Public Overrides Function ToString() As String
- Return String.Format("({0},{1},{2},{3})", X, Y, Z, W)
- End Function
- Public Shared Function Normalize(ByVal v1 As Vector4D) As Vector4D
- Return v1 / v1.Length
- End Function
- Public Shared Function ScalarProduct(ByVal v1 As Vector4D, ByVal v2 As Vector4D) As Double
- Return v1.X * v2.X + v1.Y * v2.Y + v1.Z * v2.Z + v1.W * v2.W
- End Function
- Public Shared Function IsOrthogonal(ByVal v1 As Vector4D, ByVal v2 As Vector4D) As Boolean
- If Double.Equals(ScalarProduct(v1, v2), 0) Then Return True
- Return False
- End Function
- End Structure
Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von „TheVBTutorialsVB“ () aus folgendem Grund: Update