Автокликер Clickermann :: Форум
Основной раздел => Общие вопросы => Topic started by: ya12 on February 18, 2018, 12:34:38 AM
-
Переписываю бота на мышиное управление. Для пересчета геодаты игры в экранные координаты мыши требуется взять натуральный логарифм. Как посчитать средствами кликера?
-
Если идей как взять логарифм нет, придется считать через кубическую регрессию. У нее до 1000 условных единиц геодаты погрешность меньше.
-
я даже представить не могу зачем тебе это, и что значит "пересчет геодаты игры в экранные координаты мыши" :-\ .
Методы вычисления натурального логарифма есть в википедии.
вот один из них
SUB(ln_x, $ln)
$n_ln = 1
FOR($i_ln=2,$i_ln<500,2)
$n_ln = $n_ln + ((1/($i_ln+1))*pow(($ln-1)/($ln+1),$i_ln))
END_CYC
$ln_x = 2*(($ln-1)/($ln+1))*$n_ln
END_SUB
//-------------------------------------
//пример
ln_x(6) // натуральный логарифм шести
print($ln_x) // 1.79175946926 - результат немного разнится в разных версиях кликермана
halt
FOR($i_ln=2,$i_ln<500,2) - число "500" это точность расчетов, чем больше тем точнее, но медленнее. если нужна скорость расчетов, то можно уменьшить.
-
Большое спасибо.
PS Игра 3D, вид от 3-го лица. Есть текущие координаты геодаты перса, камеры в игре и контрольной точки. Есть расчет угла поворота и дальность до контрольной точки в координатах геодаты. По экспериментальным данным на сайте planetcalc.ru/5992/ построена логарифмическая функция зависимости дистанции в геодате от координат по оси Y куда кликнул мышкой на экране.
PS2 FOR($i_ln=2,$i_ln<3000,2) -> при ln 1000 дает точность до 3 знака после запятой - то что надо.
-
чем ближе значение Х к единице, тем точнее вычисления. но можно использовать тождества логарифмов для более точных расчетов. алгоритм написанный мной выше рассчитывает более менее точно числа в интервале от 0.001 до 100. если чиcла за пределами, то не беда. вот два примера с расчетом 1234 и 0.000321
SUB(ln_x, $ln)
$n_ln = 1
FOR($i_ln=2,$i_ln<500,2)
$n_ln = $n_ln + ((1/($i_ln+1))*pow(($ln-1)/($ln+1),$i_ln))
END_CYC
$ln_x = 2*(($ln-1)/($ln+1))*$n_ln
END_SUB
//-------------------------------------
//примеры
//ln_x(1234) = ln_x(1.234*pow(10,3)) = ln_x(1.234)+ln_x(pow(10,3)) = ln_x(1.234)+3*ln_x(10)
ln_x(1.234)
$ln_x1 = $ln_x
ln_x(10)
$ln_x2 = $ln_x
print($ln_x1 + 3*$ln_x2) //нат. логарифм 1234 = 7.11801620448
//--------------
//ln_x(0,000321) = ln_x(3.21*pow(10,-4)) = ln_x(3.21)+ln_x(pow(10,-4)) = ln_x(3.21)-4*ln_x(10)
ln_x(3.21)
$ln_x1 = $ln_x
ln_x(10)
$ln_x2 = $ln_x
print($ln_x1 - 4*$ln_x2) //нат. логарифм 0,000321 = -8.04406943487
halt
информация с вики https://ru.wikipedia.org/wiki/Натуральный_логарифм (https://ru.wikipedia.org/wiki/Натуральный_логарифм)
(https://i.imgur.com/2FWUOId.png)