Возможен ли барьер узлов с расположением силы d3?

Привет, я новичок в D3, и я не могу найти ни одного примера макета силы d3, в котором есть барьеры, являющиеся путями. Я думаю что-то вроде этого.

Песочные часы узлов круга

вот так, но неправильная граница, а не коробка. https://bl.ocks.org/mbostock/1129492


person zippyferguson    schedule 23.08.2017    source источник
comment
Связанный (D3 V4): stackoverflow .com/questions/39928306/ вы хотите сделать это на определенной версии D3?   -  person Frosty Z    schedule 24.08.2017
comment
Это также может быть полезно: определить, находится ли точка в многоугольнике stackoverflow.com/questions/13279165/   -  person Frosty Z    schedule 24.08.2017
comment
Я хотел сделать это в v4 и подумал, что, возможно, один из узлов может игнорировать силы и быть размещенным специально, чтобы испускать отрицательный заряд, отталкивая другие узлы.   -  person zippyferguson    schedule 25.08.2017


Ответы (1)


Я не понимаю, почему это невозможно, код, используемый в примере:

function tick() {
node.attr("cx", function(d) { return d.x = Math.max(radius, Math.min(width - radius, d.x)); })
    .attr("cy", function(d) { return d.y = Math.max(radius, Math.min(height - radius, d.y)); });

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

Трудность может заключаться в отражении формы на другой стороне svg.

Что-то типа:

function tick() {
node.attr("cx", function(d) { return function(d){ 
d.x = Math.max(radius, Math.min(d3.select(this).attr("cy")- radius, d.x)); }}
.attr("cy", function(d) { return d.y = Math.max(radius, Math.min(height - radius, d.y)))
}

Я думаю, что это должно создать диагональную линию с правой стороны с градиентом 1: 1, но, очевидно, это не проверено, и это может значительно замедлить силу.

person Oliver Houston    schedule 23.08.2017