Могу ли я воздействовать на силу на D3.js, чтобы & & ldquo; nice & rdquo; сеть создана? [Дубликат]

Объявлено, но не определено переменная или функция.

Типичным объявлением переменной является

extern int x;

. Поскольку это только объявление, требуется одно определение. Соответствующим определением будет:

int x;

Например, следующее генерирует ошибку:

extern int x;
int main()
{
    x = 0;
}
//int x; // uncomment this line for successful definition

Аналогичные замечания относятся к функциям. Объявление функции без ее определения приводит к ошибке:

void foo(); // declaration only
int main()
{
   foo();
}
//void foo() {} //uncomment this line for successful definition

Будьте осторожны, чтобы выполняемая вами функция точно соответствовала той, которую вы объявили. Например, у вас могут быть несогласованные cv-квалификаторы:

void foo(int& x);
int main()
{
   int x;
   foo(x);
}
void foo(const int& x) {} //different function, doesn't provide a definition
                          //for void foo(int& x)

Другие примеры несоответствий включают

  • Функция / переменная, объявленная в одном пространстве имен, определенное в другом.
  • Функция / переменная, объявленная как член класса, определяемая как глобальная (или наоборот).
  • Тип возвращаемого значения функции, номер и типы параметров и соглашение о вызове не совсем точно согласуются.

Сообщение об ошибке из компилятора часто дает вам полное объявление переменной или функции, которая была объявлена, но не определена. Сравните его с определением, которое вы указали. Убедитесь, что каждая деталь соответствует.

48
задан VividD 2 February 2014 в 03:05
поделиться

4 ответа

К сожалению, ответа на ваш вопрос не существует.

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

Кроме того, нигде не существует какого-либо механизма, который бы вообще сокращал пересечения ребер. Я просмотрел десятки библиотек визуализации и алгоритмов компоновки, и ни один из них не связан с уменьшением кросс-пересечений на общем неориентированном графике.

Существует ряд алгоритмов, которые хорошо работают для планарных графов, или 2 -уровневые графики или другие упрощения. dagre хорошо работает в теории для двухуровневых графов, хотя полная нехватка документации делает почти невозможным работу.

. Частично это объясняется тем, что выкладка графиков трудно. В частности, сведение к минимуму пересечений кромок NP-hard, поэтому я подозреваю, что большинство дизайнеров макетов поразило эту проблему, несколько раз ударило головой о клавиатуру и сдался.

Если кто-то придумал хорошая библиотека для этого, пожалуйста, опубликуйте ее для остальных из нас:)

9
ответ дан GreySage 28 August 2018 в 04:26
поделиться

Я «решил» проблему с этим:

nodes[0].x = width / 2;
nodes[0].y = 100;
nodes[0].fixed = true;
force.on("tick", function(e) {

    var kx = .4 * e.alpha, ky = 1.4 * e.alpha;
    links.forEach(function(d, i) {
      d.target.x += (d.source.x - d.target.x) * kx;
      d.target.y += (d.source.y + 80 - d.target.y) * ky;
    });
    [...]
 }

http://mbostock.github.io/d3/talk/20110921/parent-foci.html

Это не совсем то, что мы хотели, но лучше, чем раньше. Importend - это то, что вы определяете «root» -Node и исправляете его.

nodes[0].fixed = true;

Он выглядит больше как дерево, но так яснее.

-1
ответ дан Baum 28 August 2018 в 04:26
поделиться

Я следовал примеру Force Editor, и я увидел, что параметры charge и linkDistance решают проблему.

  ...
  .charge(-200)
  .linkDistance(50)
  ...

Снимок экрана:

enter image description here [/g0]

1
ответ дан Ionică Bizău 28 August 2018 в 04:26
поделиться

Что-то, что может быть проще, чем пытаться сильно отразить ребра, - это покачивать узлы вокруг, пока количество линий пересечения в системе не будет ниже.

http://en.wikipedia.org/wiki/Simulated_annealing

Начните с узлов с наименьшим количеством подключений и пошагите.

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

. Более боковой подход к визуализации - это оживить его так, что он отображает только подмножество узлов и соединений за раз. Или сделать края прозрачными, пока пользователь не наложит фокус мыши на узел, что указывает на то, что связанные края становятся более видимыми.

5
ответ дан VoronoiPotato 28 August 2018 в 04:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: