중력처럼 바닥에 끌린 볼을 안에 넣고 용기를 만들려고합니다. 나는 그것을 잘하는 것에 가깝지만 볼은 결국 서로 녹아서 가시성을 유지하지 못합니다.경계 영역에서 중력을 정확하게 시뮬레이션하려면 어떻게해야합니까?
나는 각 노드의 반경을 고려하지 않기 때문에 문제가 중력 함수 자체에서 오는 생각 :
var gravity = function() {
return function(d) {
d.y += (d.cy - d.y);
d.x += (d.cx - d.x);
};
}
또는 시뮬레이션 애니메이션의 경계 함수에서 (체크)
, 위의 동일한 문제에 대해d3.selectAll("circle.node")
.attr("cx", function(d,i){ return Math.max(radius, Math.min(width - radius, d.x)); })
.attr("cy", function(d,i){ return Math.max(radius, Math.min(height - radius, d.y)); });
이 경우 각 볼을 어떻게 구분할 수 있습니까?
편집 : 나는 그것을 공유 할 것이다 해결책을 발견 곧
당신은 [충돌의 힘을 사용할 수 있습니다 ] (https://github.com/d3/d3-force#collision)'d3.forceCollide'를 사용하면 중복을 막을 수 있습니다. 커스텀 중력 함수를 구현 한 놀라운 블록 [* Mixing drinks on Tralfamadore *] (https://bl.ocks.org/monfera/2d2809d8458ffb81cc9acab2e65ed4ef)을 살펴보고 점들을 구별하기 위해'd3.forceCollide'를 사용하십시오. – altocumulus
나는이 예제를 본 적이 있지만, 나는 그것을 원한다면 성공시킬 수있는 방법을 찾지 못했다.이 데모는 웨이브와 함께 커스텀 스크립트를 사용하는데, 한번 더 해보겠습니다. – pirs