2017-08-23 5 views
1

こんにちは、私はD3を初めて使っていて、パスであるバリアを持つd3 forceレイアウトを見つけることができません。私はこのようなことを考えている。この不規則な境界ではなく、ボックスのようなノードバリアはd3 forceレイアウトで可能ですか?

Hour glass of circle nodes

。それは可能ではない理由

https://bl.ocks.org/mbostock/1129492
+0

関連(D3 V4):https://stackoverflow.com/questions/39928306/d3-js-force-layout-boundary-issue-v4 D3の特定のバージョンでこれを行う予定ですか? –

+0

これは参考になるかもしれません:ポイントがポリゴンにあるかどうかを検出するhttps://stackoverflow.com/questions/13279165/how-to-find-if-point-is-inside-polygon-in-d3-js –

+0

私はv4でそれをしようとしていて、おそらくノードの1つが力を無視し、特に配置され、負の電荷を放ち、他のノードを撃退する可能性があると考えていました。 – zippyferguson

答えて

-2

Iは、実施例で使用されるコードが表示されない:

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の反対側の形を鏡映するのが難しいかもしれません。 1勾配しかし、明らかにテストされていないと、それは大規模な力が低下する可能性があります:私はそれが1と右側の対角線を設定すべきだと思う

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))) 
} 

:よう

何か。

関連する問題