All pastes #815169 Raw Edit

Anonymous

public text v1 · immutable
·published 2007-12-13 21:15 UTC
rendered paste body
Type Vector3

	' 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 Vector3
	Method FromVector(v:Vector3)
	
		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:Vector3(x:Float, y:Float, z:Float)
	
		Local Result:Vector3 = New Vector3
		
		Result.FromXYZ(x, y, z)
		
		Return Result
		
	EndFunction		
	
	' Create new vector from another
	Function CreateFromVector:Vector3(v:Vector3)
	
		Local Result:Vector3 = New Vector3
		
		Result.FromVector(v)
		
		Return Result
	
	EndFunction
	
	' Add two vectors
	Function Add:Vector3(Result:Vector3, v1:Vector3, v2:Vector3)
	
		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:Vector3(Result:Vector3, v1:Vector3, v2:Vector3)
	
		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:Vector3(Result:Vector3, v1:Vector3)
	
		Result.x = -v1.x
		Result.y = -v1.y
		Result.z = -v1.z

		Return Result
	
	EndFunction
	
	' Multiply vector with scalar
	Function MulScalar:Vector3(Result:Vector3, v:Vector3, 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:Vector3)
	
		Return Dot(v, v)
	
	EndFunction
	
	' Get length of vector
	Function Length:Float(v:Vector3)
	
		Return Sqr(SquaredLength(v))
	
	EndFunction
	
	' Normalize vector
	Function Normalize:Vector3(Result:Vector3, v:Vector3)
	
		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:Vector3, v2:Vector3)

		Return (v1.x * v2.x + v1.y * v2.y + v1.z * v2.z);	
	
	EndFunction
	
	' Cross product of vector
	Function Cross:Vector3(Result:Vector3, v1:Vector3, v2:Vector3)
	
		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:Vector3(Result:Vector3, v1:Vector3, v2:Vector3, 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:Vector3, v2:Vector3)
	
		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