Тема: AHK: Перевод координат из мира на экран
Здравствуйте.
Есть функция WorldToScreen - эта функция делает что-то типо перевода координат игроков из мира на экран, т.е. конвертирует.
Искал в интернете функцию WorldToScreen для AHK, но не нашел. Нашел только для AutoIt:
Func __WorldToScreen1( ByRef $x, ByRef $y, $_vLocation, $_vOrigin, $_aFOV )
Local $vTransform[3]
Local $vLocal = _FVec_Subtract( $_vLocation, $_vOrigin )
$vTransform[0] = _FVec_DotProduct( $vLocal, $_Axis[1])
$vTransform[1] = _FVec_DotProduct( $vLocal, $_Axis[2])
$vTransform[2] = _FVec_DotProduct( $vLocal, $_Axis[3])
If $vTransform[2] < 0.1 Then _
Return False
$x = $_CenterX * (1 - ($vTransform[0] / $_aFOV[0] / $vTransform[2]))
$y = $_CenterY * (1 - ($vTransform[1] / $_aFOV[1] / $vTransform[2]))
Return True
EndFunc
И вот какая то библиотека для того что написано выше:
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
На других языках таком как C++ такую функцию легко найти, но я не программист поэтому не кидал так как там они отличаются чем-то.
Скажите пожалуйста есть ли такая функция для AHK, а если нету, то возможно ли ее создать?