Вопрос изначально возник вне пределов jass, но это особо не важно.
Есть точка, движущаяся с фиксированной скоростью speed, и каждую итерацию поворачивающаяся на угол rotationSpeed. Вопрос - как, имея эти данные, получить радиус окружности, являющейся траекторией движения точки?
примерный код, описывающий движение точки, как это выглядело бы в jass-е
// udg_Facing - текущий угол поворота;
// udg_Location - перемещаемая точка;
// MoveIteration() вызывается из таймера, т.е. циклична.
function MoveIteration takes nothing returns nothing
local real currentX = GetLocationX(udg_Location)
local real currentY = GetLocationY(udg_Location)
local real speed = 3
local real rotationSpeed = 6
set udg_Facing = udg_Facing + rotationSpeed
call MoveLocation (udg_Location, currentX, currentY, speed, udg_Facing)
endfunction
function MoveLocation takes location loc, real xPos, real yPos, real speed, real angle returns nothing
call SetLocationX(loc, xPos + speed * Cos (angle * bj_DEGTORAD))
call SetLocationY(loc, yPos + speed * Sin (angle * bj_DEGTORAD))
endfunction
Принятый ответ
проверил, все работает, всем спасибо)
в коде будет примерно такой вид:
в коде будет примерно такой вид:
function getTrajectoryRadius takes real speed, real rotationSpeed returns real
local real N = 360 / rotationSpeed // количество сторон вписанного многоугольника
return speed / (2 * (Sin (PI / N)))
endfunction
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Отредактирован MpW
конечная точка:
xPos + speed * Cos (angle * bj_DEGTORAD)
yPos + speed * Sin (angle * bj_DEGTORAD)
function DistanceBetweenPoints takes location locA, location locB returns real
local real dx = GetLocationX(locB) - GetLocationX(locA)
local real dy = GetLocationY(locB) - GetLocationY(locA)
return SquareRoot(dx * dx + dy * dy)
endfunction
Отредактирован HolyMoon
И траектория ее движения образует окружность, радиус которой и нужно получить.
Отредактирован MpW
Отредактирован biridius
точка у нас траекторией своего движения описывает что-то вроде правильного многоугольника. внешний угол
R = a/(2 Sin (360/2N)), где a - ребро (скорость за одну итерацию) и n - ранее найденное число ребер
Отредактирован HolyMoon
Отредактирован MpW
Отредактирован biridius
его и считаем за приближенный радиус "окружности" которую у нас описывает движущаяся точка
Отредактирован HolyMoon
в коде будет примерно такой вид:
Отредактирован MpW
у меня почему-то компас выдал обычный угол 6-ного многоугольника = 120°
а по формуле должен получится 60°
Ищу то не А-центральный, а обычный. Все понял, это называется внутренний угол. попутал