#include-once

; - Author: name22 (www.autoit.de)

Global Const $Pi_Div_180 = ACos(-1) / 180

Func _Vector_GetAngle($aV1, $aV2)
	$ScalarProduct = $aV1[0] * $aV2[0] + $aV1[1] * $aV2[1]
	$VectorNorm_V1 = Sqrt($aV1[0] ^ 2 + $aV1[1] ^ 2)
	$VectorNorm_V2 = Sqrt($aV2[0] ^ 2 + $aV2[1] ^ 2)

	Return ACos($ScalarProduct / ($VectorNorm_V1 * $VectorNorm_V2)) / $Pi_Div_180
EndFunc   ;==>_Vector_GetAngle

Func _Vector_Normalize($aNorm)
	Local $aReturn[2]

	$nVectorLength = Sqrt($aNorm[0] ^ 2 + $aNorm[1] ^ 2)
	If $nVectorLength Then
		$aReturn[0] = $aNorm[0] / $nVectorLength
		$aReturn[1] = $aNorm[1] / $nVectorLength
	Else
		$aReturn[0] = 0
		$aReturn[1] = 0
	EndIf

	Return $aReturn
EndFunc   ;==>_Vector_Normalize

Func _Vector_RotateOnZAxis($aRotate, $iDegree)
	Local $aReturn[2]

	$aReturn[0] = $aRotate[0] * _Cos($iDegree) - $aRotate[1] * _Sin($iDegree)
	$aReturn[1] = $aRotate[1] * _Cos($iDegree) + $aRotate[0] * _Sin($iDegree)

	Return $aReturn
EndFunc   ;==>_Vector_RotateOnZAxis

Func _Vector_ProjectVector($aV1, $aV2)
	Local $aReturn[2]
	$ScalarProduct = $aV1[0] * $aV2[0] + $aV1[1] * $aV2[1]
	$aReturn[0] = ($ScalarProduct / ($aV1[0] * $aV1[1] + $aV2[0] * $aV2[1])) * $aV2[0]
	$aReturn[1] = ($ScalarProduct / ($aV1[0] * $aV1[1] + $aV2[0] * $aV2[1])) * $aV2[1]

	Return $aReturn
EndFunc   ;==>_Vector_ProjectVector

Func _Vector_GetLength($aLength)
	Return Sqrt($aLength[0] ^ 2 + $aLength[1] ^ 2)
EndFunc   ;==>_Vector_GetLength

Func _Vector_Create($nX_Value, $nY_Value)
	Local $aReturn[2]
	$aReturn[0] = $nX_Value
	$aReturn[1] = $nY_Value

	Return $aReturn
EndFunc

Func _Cos($nValue)
	Return Cos($nValue * $Pi_Div_180)
EndFunc   ;==>_Cos

Func _Sin($nValue)
	Return Sin($nValue * $Pi_Div_180)
EndFunc   ;==>_Sin

Func _Tan($nValue)
	Return Tan($nValue * $Pi_Div_180)
EndFunc   ;==>_Tan