sebun
Знающий
- Сообщения
- 81
- Репутация
- 5
Вот функция, которую написал Dellroc.
Пытаюсь понять как он находит угол?
Откуда число 45? У меня эта функция возвращает неверные значения. К примеру:
Как поправить код Dellroсa, что бы выдавал нужный результат? Пытался по формулам сделать, но некорректно получается.
И сразу второй вопрос по движению: правильно ли будет расчитывать движение по алгоритму Dellroсa
или же писать свой по формулам:
X = X + A * cos(Angle * PI / 180);
Y = Y + A * sin(Angle * PI / 180);
хотя это помоему одно и то же, только с добавлением радиуса к позиции персонажа... Но что за число 90?
Код:
Func be_CoordsToRotation($bectr_X1, $bectr_Y1, $bectr_X2, $bectr_Y2)
Local $bectr_DX = $bectr_X2-$bectr_X1
Local $bectr_DY = $bectr_Y2-$bectr_Y1
Local $bectr_AXY = Abs(ATan($bectr_DX/$bectr_DY))
Local $bectr_AYX = Abs(ATan($bectr_DY/$bectr_DX))
Local $bectr_hpi = ATan(1)*2
Local $bectr_Angle = 0
If $bectr_X1 > $bectr_X2 Then
$bectr_Angle += 2*$bectr_hpi
If $bectr_Y1 > $bectr_Y2 Then
$bectr_Angle += $bectr_AXY
ElseIf $bectr_Y1 = $bectr_Y2 Then
$bectr_Angle += $bectr_hpi
ElseIf $bectr_Y1 < $bectr_Y2 Then
$bectr_Angle += $bectr_hpi
$bectr_Angle += $bectr_AYX
EndIf
ElseIf $bectr_X1 = $bectr_X2 Then
If $bectr_Y1 > $bectr_Y2 Then
$bectr_Angle += 2*$bectr_hpi
EndIf
ElseIf $bectr_X1 < $bectr_X2 Then
If $bectr_Y1 > $bectr_Y2 Then
$bectr_Angle += $bectr_hpi
$bectr_Angle += $bectr_AYX
ElseIf $bectr_Y1 = $bectr_Y2 Then
$bectr_Angle += $bectr_hpi
ElseIf $bectr_Y1 < $bectr_Y2 Then
$bectr_Angle += $bectr_AXY
EndIf
EndIf
Local $R = Round(Sqrt(($bectr_X1 - $bectr_X2) ^ 2 + ($bectr_Y1 - $bectr_Y2) ^ 2),4)
$bectr_Angle = Round($bectr_Angle*45/ATan(1),4)
Local $lR[2] = [$bectr_Angle,$R]
Return $lR
EndFunc
Пытаюсь понять как он находит угол?
Код:
$bectr_Angle = Round($bectr_Angle*45/ATan(1),4)
Откуда число 45? У меня эта функция возвращает неверные значения. К примеру:
Код:
; координаты на миникарте
$X1=215 ; текущее положение персонажа
$Y1=235
$X2=211 ; куда ему надо пойти
$Y2=231
Как поправить код Dellroсa, что бы выдавал нужный результат? Пытался по формулам сделать, но некорректно получается.
И сразу второй вопрос по движению: правильно ли будет расчитывать движение по алгоритму Dellroсa
Код:
$mX = $persPos[0] + $lRadius * Cos(($tCTR[0]-90)*4*atan(1)/180)
$mY = $persPos[1] + $lRadius * Sin(($tCTR[0]-90)*4*atan(1)/180)
или же писать свой по формулам:
X = X + A * cos(Angle * PI / 180);
Y = Y + A * sin(Angle * PI / 180);
хотя это помоему одно и то же, только с добавлением радиуса к позиции персонажа... Но что за число 90?