It's a type Vector3D. I put the position of the vertex into a vector.
I use an array because it's more easy to use with matrix.
Here his my type Vector3D. If you have suggestion for a nicer code. I'm interested :-)
Type Vector3D
Field Vector : Float[3]
Method SetVector3D( x : Float, y : Float, z : Float)
Self.vector[0] = x
Self.vector[1] = y
Self.vector[2] = z
End Method
Method GetVectorX:Float()
Return Self.Vector[0]
End Method
Method GetVectorY:Float()
Return Self.Vector[1]
End Method
Method GetVectorZ:Float()
Return Self.Vector[2]
End Method
Method SetVectorX( X : Float)
Self.Vector[0] = X
End Method
Method SetVectorY( Y : Float)
Self.Vector[0] = Y
End Method
Method SetVectorZ( Z : Float)
Self.Vector[0] = Z
End Method
Method Addition:Vector3D( vector : Vector3D)
Self.Vector[0] = Self.Vector[0] + vector.Vector[0]
Self.Vector[1] = Self.Vector[1] + vector.Vector[1]
Self.Vector[2] = Self.Vector[2] + vector.Vector[2]
Return Self
End Method
Method Substraction:Vector3D( vector : Vector3D)
Self.Vector[0] = Self.Vector[0] - vector.Vector[0]
Self.Vector[1] = Self.Vector[1] - vector.Vector[1]
Self.Vector[2] = Self.Vector[2] - vector.Vector[2]
Return Self
End Method
Method Multiply:Vector3D( k : Float)
Self.Vector[0] = Self.Vector[0] * k
Self.Vector[1] = Self.Vector[1] * k
Self.Vector[2] = Self.Vector[2] * k
Return Self
End Method
Method Divide:Vector3D( k : Float)
Self.Vector[0] = Self.Vector[0] / k
Self.Vector[1] = Self.Vector[1] / k
Self.Vector[2] = Self.Vector[2] / k
Return Self
End Method
Method Equal:Byte( vector : Vector3D)
If (Self=vector) Return True
End Method
Method Negative:Vector3D( )
Self.Vector[0] = -Self.Vector[0]
Self.Vector[1] = -Self.Vector[1]
Self.Vector[2] = -Self.Vector[2]
Return Self
End Method
Method SquareMagnitude:Float()
Local Magnitude : Float
Magnitude = Self.Vector[0]*Self.Vector[0] + Self.Vector[1]*Self.Vector[1] + Self.Vector[2]*Self.Vector[2]
Return Magnitude
End Method
Method Magnitude:Float()
Return (sqr ( Self.SquareMagnitude()))
End Method
Method Normalized:Vector3D()
Return ( Self.divide (Self.Magnitude()))
End Method
Method CrossProduct:Vector3D( Vector1 : Vector3D)
Local result : Vector3D
result = New Vector3D
result.Vector[0] = Self.Vector[1]*Vector1.Vector[2] - Self.Vector[2]*Vector1.Vector[1]
result.Vector[1] = Self.Vector[2]*Vector1.Vector[0] - Self.Vector[0]*Vector1.Vector[2]
result.Vector[2] = Self.Vector[0]*Vector1.Vector[1] - Self.Vector[1]*Vector1.Vector[2]
Return result
End Method
Method DotProduct: Float( Vector1 : Vector3D)
Local result : Float
result = Self.Vector[0]*Vector1.Vector[0] + Self.Vector[1]*Vector1.Vector[1] + Self.Vector[2]*Vector1.Vector[2]
Return result
End Method
End type
I use an array because it's more easy to use with matrix.
Here his my type Vector3D. If you have suggestion for a nicer code. I'm interested :-)
Type Vector3D
Field Vector : Float[3]
Method SetVector3D( x : Float, y : Float, z : Float)
Self.vector[0] = x
Self.vector[1] = y
Self.vector[2] = z
End Method
Method GetVectorX:Float()
Return Self.Vector[0]
End Method
Method GetVectorY:Float()
Return Self.Vector[1]
End Method
Method GetVectorZ:Float()
Return Self.Vector[2]
End Method
Method SetVectorX( X : Float)
Self.Vector[0] = X
End Method
Method SetVectorY( Y : Float)
Self.Vector[0] = Y
End Method
Method SetVectorZ( Z : Float)
Self.Vector[0] = Z
End Method
Method Addition:Vector3D( vector : Vector3D)
Self.Vector[0] = Self.Vector[0] + vector.Vector[0]
Self.Vector[1] = Self.Vector[1] + vector.Vector[1]
Self.Vector[2] = Self.Vector[2] + vector.Vector[2]
Return Self
End Method
Method Substraction:Vector3D( vector : Vector3D)
Self.Vector[0] = Self.Vector[0] - vector.Vector[0]
Self.Vector[1] = Self.Vector[1] - vector.Vector[1]
Self.Vector[2] = Self.Vector[2] - vector.Vector[2]
Return Self
End Method
Method Multiply:Vector3D( k : Float)
Self.Vector[0] = Self.Vector[0] * k
Self.Vector[1] = Self.Vector[1] * k
Self.Vector[2] = Self.Vector[2] * k
Return Self
End Method
Method Divide:Vector3D( k : Float)
Self.Vector[0] = Self.Vector[0] / k
Self.Vector[1] = Self.Vector[1] / k
Self.Vector[2] = Self.Vector[2] / k
Return Self
End Method
Method Equal:Byte( vector : Vector3D)
If (Self=vector) Return True
End Method
Method Negative:Vector3D( )
Self.Vector[0] = -Self.Vector[0]
Self.Vector[1] = -Self.Vector[1]
Self.Vector[2] = -Self.Vector[2]
Return Self
End Method
Method SquareMagnitude:Float()
Local Magnitude : Float
Magnitude = Self.Vector[0]*Self.Vector[0] + Self.Vector[1]*Self.Vector[1] + Self.Vector[2]*Self.Vector[2]
Return Magnitude
End Method
Method Magnitude:Float()
Return (sqr ( Self.SquareMagnitude()))
End Method
Method Normalized:Vector3D()
Return ( Self.divide (Self.Magnitude()))
End Method
Method CrossProduct:Vector3D( Vector1 : Vector3D)
Local result : Vector3D
result = New Vector3D
result.Vector[0] = Self.Vector[1]*Vector1.Vector[2] - Self.Vector[2]*Vector1.Vector[1]
result.Vector[1] = Self.Vector[2]*Vector1.Vector[0] - Self.Vector[0]*Vector1.Vector[2]
result.Vector[2] = Self.Vector[0]*Vector1.Vector[1] - Self.Vector[1]*Vector1.Vector[2]
Return result
End Method
Method DotProduct: Float( Vector1 : Vector3D)
Local result : Float
result = Self.Vector[0]*Vector1.Vector[0] + Self.Vector[1]*Vector1.Vector[1] + Self.Vector[2]*Vector1.Vector[2]
Return result
End Method
End type