Func _FVec_Addition( $vector1, $vector2 )
Local $vector[3]
$vector[0] = $vector1[0] + $vector2[0]
$vector[1] = $vector1[1] + $vector2[1]
$vector[2] = $vector1[2] + $vector2[2]
Return $vector
EndFunc
Func _FVec_Subtract( $vector1, $vector2 )
Local $vector[3]
$vector[0] = $vector1[0] - $vector2[0]
$vector[1] = $vector1[1] - $vector2[1]
$vector[2] = $vector1[2] - $vector2[2]
Return $vector
EndFunc
Func _FVec_Multiply( $vector1, $vector2 )
Local $vector[3]
$vector[0] = $vector1[0] * $vector2[0]
$vector[1] = $vector1[1] * $vector2[1]
$vector[2] = $vector1[2] * $vector2[2]
Return $vector
EndFunc
Func _FVec_Divide( $vector1, $vector2 )
Local $vector[3]
$vector[0] = $vector1[0] / $vector2[0]
$vector[1] = $vector1[1] / $vector2[1]
$vector[2] = $vector1[2] / $vector2[2]
Return $vector
EndFunc
Func _FVec_Distance( $vector1, $vector2 )
Local $v = _FVec_Subtract($vector1, $vector2)
Return _FVec_Length($v)
EndFunc
Func _FVec_CrossProduct( $vector1, $vector2 )
If (UBound($vector1) = 2) Then
Return ($vector1[0] * $vector2[1]) - ($vector1[1] * $vector2[0])
ElseIf (UBound($vector1) = 3) Then
Local $v[3]
$v[0] = ($vector1[1] * $vector2[2]) - ($vector1[2] * $vector2[1])
$v[1] = ($vector1[2] * $vector2[0]) - ($vector1[0] * $vector2[2])
$v[2] = ($vector1[0] * $vector2[1]) - ($vector1[1] * $vector2[0])
Return $v
EndIf
EndFunc
Func _FVec_DotProduct( $vector1, $vector2 )
Local $v
$v = $vector1[0]*$vector2[0]
$v += $vector1[1]*$vector2[1]
$v += $vector1[2]*$vector2[2]
Return $v
EndFunc
Func _FVec_Normalize( $vector1 )
If $vector1[0] = 0 And $vector1[1] = 0 Then _
Return 0
Local $v[2]
Local $length = _FVec_Length( $vector1 )
$v[0] = $vector1[0] / $length
$v[1] = $vector1[1] / $length
Return $v
EndFunc
Func _FVec_Length( $vector1 )
Local $v, $i
For $i = 0 To UBound($vector1) - 1
$v += $vector1[$i] ^ 2
Next
Return Sqrt($v)
EndFunc