Рисование турнирной сетки (PHP & GD) - PullRequest
1 голос
/ 03 февраля 2010

В настоящее время я работаю над составлением турнирной сетки для одного из моих проектов. Кажется, он работает, рисуя меньшие скобки, но как только я доберусь до 16, он начинает капризничать.

Перейдите по ссылкам и посмотрите, как оно неуместно после 8.

http://www.mattdsworld.com/mmaplayer/index.php/tournament/viewBracket/2

http://www.mattdsworld.com/mmaplayer/index.php/tournament/viewBracket/4

http://www.mattdsworld.com/mmaplayer/index.php/tournament/viewBracket/8

http://www.mattdsworld.com/mmaplayer/index.php/tournament/viewBracket/16

http://www.mattdsworld.com/mmaplayer/index.php/tournament/viewBracket/32

http://www.mattdsworld.com/mmaplayer/index.php/tournament/viewBracket/64

http://www.mattdsworld.com/mmaplayer/index.php/tournament/viewBracket/128

После этого я получаю ошибки оперативной памяти, что на самом деле не является проблемой с момента законного использования оперативной памяти, и я могу оправдать повышение максимумов для этого сценария (конечно, он не будет запускать каждую загрузку страницы в финальный скрипт, изображение будет кешироваться).

В любом случае, как вы видите, если вы прогрессируете через изображения, они, кажется, все больше и больше сбиваются с пути.

Код здесь: http://pastebin.com/f5485b027 (Должен ли я публиковать такой код или встроенный? Я не был уверен)

Я совершенно заблудился, как это исправить, поэтому, пожалуйста, вводите идеи / предложения. Мне не нужно решение кода, мне просто нужно руководство по математике / позиционированию.

Спасибо, Matt

1 Ответ

1 голос
/ 03 февраля 2010

Скобки «правильно» нарисованы на основе алгоритма.

Вы прошли через код для проблемных случаев, особенно для $ y?

Я не уверен, как работает алгоритм (не очень понимаю, как использовать $ takeAway).

Но вот что я бы придумал:

for ($k = 1; $k < ($rounds + 1); $k++)
{
    // Calculate currLeftDraw and currRightDraw Here...

    $spacing = 60 * pow(2, ($k - 1));
    $firstY = ($spacing / 2) - 30;

    for ($i = 0; $i < ($sizePlayers / (pow(2, $k))); $i++)
    {
        $yPos = $firstY + ($i * $spacing);

        // Rest of code here...
    }
}
...