Реализация расквартированной древовидной карты в JavaScript - PullRequest
8 голосов
/ 27 марта 2012

В настоящее время я пытаюсь реализовать алгоритм древовидной карты в Javascript.Более конкретно алгоритм описан в Squarified Treemaps .Приведенный псевдокод выглядит следующим образом:

procedure squarify(list of real children, list of real row, real w)
begin
    real c = head(children);
    if worst(row, w) <= worst(row++[c], w) then
        squarify(tail(children),row++[c], w)
    else
        layoutrow(row);
        squarify(children,[], width());
    fi
end

однако мой JavaScript выглядит так:

var c = children[0];
if (worst(row, w) >= worst(row.concat(c), w)) {
    this.squarify(children.splice(1), row.concat(c), w);
} else {
    layoutrow(row);
    this.squarify(children, [], width());
}

Насколько я могу судить, мой код работает правильно, но неравенство невернонаоборот.Я предполагаю, что я что-то упускаю из своей реализации, или это неравенство неправильно в псевдокоде?Спасибо

Ответы [ 2 ]

4 голосов
/ 23 июня 2013

Вы хотите добавить c к текущему row, когда это улучшит соотношение сторон, т.е. когда

worst(row++[c], w) < worst(row, w)

Я недавно добавил фрагмент кода на github, который реализует алгоритмв TypeScript и включает в себя готовый к использованию JavaScript:

https://github.com/nicnguyen/treemap

0 голосов
/ 02 июня 2017

Если вас интересует только алгоритм раскладки, посмотрите мой пакет squarify npm.Он возвращает только данные макета, оставляя вас свободным для отображения результата, как вы хотите.

...