Автокликер Clickermann :: Форум

Основной раздел => Общие вопросы => Topic started by: ya12 on February 18, 2018, 12:34:38 AM

Title: Как взять натуральный логарифм b=ln(x) средствами кликера.
Post by: ya12 on February 18, 2018, 12:34:38 AM
Переписываю бота на мышиное управление. Для пересчета геодаты игры в экранные координаты мыши требуется взять натуральный логарифм. Как посчитать средствами кликера?
Title: Re: Как взять натуральный логарифм b=ln(x) средствами кликера.
Post by: ya12 on February 18, 2018, 12:13:49 PM
Если идей как взять логарифм нет, придется считать через кубическую регрессию. У нее до 1000 условных единиц геодаты погрешность меньше.
Title: Re: Как взять натуральный логарифм b=ln(x) средствами кликера.
Post by: dramster on February 18, 2018, 04:14:22 PM
я даже представить не могу зачем тебе это, и что значит "пересчет геодаты игры в экранные координаты мыши"  :-\ .

Методы вычисления натурального логарифма есть в википедии.

вот один из них
Code: (clickermann) [Select]
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"  это  точность расчетов, чем больше тем точнее, но медленнее. если нужна скорость расчетов, то можно уменьшить.
Title: Re: Как взять натуральный логарифм b=ln(x) средствами кликера.
Post by: ya12 on February 18, 2018, 05:48:30 PM
Большое спасибо.

PS Игра 3D, вид от 3-го лица. Есть текущие координаты геодаты перса, камеры в игре и контрольной точки. Есть расчет угла поворота и дальность до контрольной точки в координатах геодаты. По экспериментальным данным на сайте planetcalc.ru/5992/ построена логарифмическая функция зависимости дистанции в геодате от координат по оси Y куда кликнул мышкой на экране.

PS2   FOR($i_ln=2,$i_ln<3000,2)   ->  при  ln 1000 дает точность до 3 знака после запятой - то что надо.


 
Title: Re: Как взять натуральный логарифм b=ln(x) средствами кликера.
Post by: dramster on February 18, 2018, 06:53:28 PM
чем ближе значение Х к единице, тем точнее вычисления. но можно использовать тождества логарифмов для более точных расчетов. алгоритм написанный мной выше рассчитывает более менее точно числа в интервале от 0.001 до 100. если чиcла за пределами, то не беда. вот два примера с расчетом 1234 и 0.000321

Code: (clickermann) [Select]
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)