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