Здравствуйте, господа программисты. Передо мной встала довольно банальная задача - подсчет рейтинга пользователей на сайте. Систему рейтинга я решил построить на основе баллов и уровней. 1й уровень 0-100 баллов, 2й уровень 100-225 баллов, 3й 225-381,25 баллов и тд. То есть каждый следующий уровень это 1.25 * разницу предыдущего. Казалось бы ничего сложного. Но я так и не придумал как зная количество баллов определить текущий уровень... То есть как из 390 баллов посчитать что это 4-й уровень? Составил нехутрую формулу для расчета баллов каждого уровня: 381,25 = 100*(1,25^0 + 1,25^1 + 1,25^2) , но никак не могу понять как получать границы уровня и как получать уровень, зная количество баллов. Буду благодарен за любые подсказки.
Оставлю тут для будущих поколений Первый уровень - 100 очков. Коэфициент 1.25 Код (Text): public function getLevel(){ $level = log( 1 - ( ($this->points * (1-1.25)) / 100 ) , 1.25); return floor($level); } public function getLevelEdges($level){ if($level != 0){ $edges['min'] = ( 100 * ( 1 - pow( 1.25, $level ) ) )/ (1-1.25); $edges['max'] = ( 100 * ( 1 - pow( 1.25, $level+1 ) ) )/ (1-1.25); } else { $edges['min'] = 0; $edges['max'] = 100; } $edges['delta'] = $edges['max'] - $edges['min']; return $edges; } public function getLevelProgress(){ $points = $this->points; $level = $this->getLevel(); $edges = $this->getLevelEdges($level); $position = ( $points - $edges['min'] ) / $edges['delta']; return floor($position * 100); }