Code archives/3D Graphics - Misc/Vector 3 class
This code has been declared by its author to be Public Domain code.
Download source code
| |||||
| Just a little port from my java engine. Again, good for beginners :) | |||||
' Vector3f class by Odin Jensen (www.furi.dk)
' Free to use as you please :)
Strict
' Vector3f class (Lots of static functions which takes an existing result vector for speed)
Type Vector3f
' Members
Field x:Float, y:Float, z:Float
' Set vector from x, y, z
Method FromXYZ(x:Float, y:Float, z:Float)
self.x = x
self.y = y
self.z = z
EndMethod
' Set vector from Vector3f
Method FromVector(v:Vector3f)
self.x = v.x
self.y = v.y
self.z = v.z
EndMethod
' Get coordinate from index
Method GetCoord:Float(Index:Int)
If Index = 0 Return x
If Index = 1 Return y
Return z
EndMethod
' Create new vector from x, y, z
Function CreateFromXYZ:Vector3f(x:Float, y:Float, z:Float)
Local Result:Vector3f = New Vector3f
Result.FromXYZ(x, y, z)
Return Result
EndFunction
' Create new vector from another
Function CreateFromVector:Vector3f(v:Vector3f)
Local Result:Vector3f = New Vector3f
Result.FromVector(v)
Return Result
EndFunction
' Add two vectors
Function Add:Vector3f(Result:Vector3f, v1:Vector3f, v2:Vector3f)
Result.x = v1.x + v2.x
Result.y = v1.y + v2.y
Result.z = v1.z + v2.z
Return Result
EndFunction
' Subtract two vectors
Function Sub:Vector3f(Result:Vector3f, v1:Vector3f, v2:Vector3f)
Result.x = v1.x - v2.x
Result.y = v1.y - v2.y
Result.z = v1.z - v2.z
Return Result
EndFunction
' Reverse vector
Function Reverse:Vector3f(Result:Vector3f, v1:Vector3f)
Result.x = -v1.x
Result.y = -v1.y
Result.z = -v1.z
Return Result
EndFunction
' Multiply vector with scalar
Function MulScalar:Vector3f(Result:Vector3f, v:Vector3f, Scalar:Float)
Result.x = v.x * Scalar
Result.y = v.y * Scalar
Result.z = v.z * Scalar
Return Result
EndFunction
' Get squared length of vector
Function SquaredLength:Float(v:Vector3f)
Return Dot(v, v)
EndFunction
' Get length of vector
Function Length:Float(v:Vector3f)
Return Sqr(SquaredLength(v))
EndFunction
' Normalize vector
Function Normalize:Vector3f(Result:Vector3f, v:Vector3f)
Local l:Float = Length(v)
If l = 0.0 Then
Result = v ' Avoid divide by zero by just returning self. Shouldn't happen anyway :)
Else
MulScalar(Result, v, 1.0 / l)
EndIf
Return Result
EndFunction
' Dot product of vector
Function Dot:Float(v1:Vector3f, v2:Vector3f)
Return (v1.x * v2.x + v1.y * v2.y + v1.z * v2.z);
EndFunction
' Cross product of vector
Function Cross:Vector3f(Result:Vector3f, v1:Vector3f, v2:Vector3f)
Result.x = v1.y * v2.z - v1.z * v2.y;
Result.y = v2.z * v2.x - v1.x * v2.z;
Result.z = v2.x * v2.y - v1.y * v2.x;
Return Result
EndFunction
' Interpolate two vectors
Function Interpolate:Vector3f(Result:Vector3f, v1:Vector3f, v2:Vector3f, t:Float)
Result.x = v1.x + t * (v2.x - v1.x);
Result.y = v1.y + t * (v2.y - v1.y);
Result.z = v1.z + t * (v2.z - v1.z);
Return Result
EndFunction
' Get distance between two points
Function GetDistance:Float(v1:Vector3f, v2:Vector3f)
Return Sqr( (v2.x - v1.x) * (v2.x - v1.x) + (v2.y - v1.y) * (v2.y - v1.y) + (v2.z - v1.z) * (v2.z - v1.z) )
EndFunction
EndType |
Comments
None.
Code Archives Forum