2011-09-14 75 views
5

Tôi đang cố gắng sử dụng và hiểu được D3 visualization library (http://mbostock.github.com/d3/) và tôi đang xem their force directed code và có vẻ như họ đang sử dụng quadtree để tính toán lực trên một hạt. Mã này làHiểu Javascript D3 trực quan quadtree

 var k = kc * quad.count * dn * dn; 
     node.px -= dx * k; 
     node.py -= dy * k; 

trong đó có vẻ như quad.count là số hạt trong nút quadtree. Nhưng nhìn vào số quadtree code của chúng tôi trong https://github.com/mbostock/d3/blob/master/d3.geom.js#L696, tôi không thể tìm thấy bất kỳ tham chiếu nào đến count và cách tính toán. Tôi hỏi vì tôi muốn sửa đổi một số thứ có lẽ thay đổi "trọng lượng" hoặc "phí" của mỗi nút.

+1

Liên kết không hoạt động nữa, @highBandWidth. Và kinh nghiệm của bạn qith quadtree trong d3.js, vì câu hỏi này là gì? :) – VividD

Trả lời

5

Hãy nhìn vào các d3_layout_forceAccumulate phương pháp:

https://github.com/mbostock/d3/blob/master/src/layout/force.js#L294-324

Các quadtree tự nó không tính trung tâm phí cho hạt của nó (vì quadtree chỉ biết về vị trí hạt, và không đưa ra bất kỳ giả định nào về các khoản phí của họ). Sau khi quadtree được tạo ra, bố trí lực đệ quy tính toán trung tâm của phí cho mỗi góc phần tư.

+0

Cảm ơn, đã hiểu! Có lẽ phương thức nên được gọi là 'd3_layout_quadCenterAccumulate', vì nó không thực sự tích lũy lực, chỉ cần tính' cx', 'cy', và' đếm'. – highBandWidth

+0

Hình cầu riêng tư trong D3 được sắp xếp theo lớp liên quan của chúng, để tránh va chạm tên tiềm năng. Vì vậy, bất cứ điều gì được định nghĩa trong src/layout/force nên có tiền tố d3_layout_force. – mbostock

+0

ohh lực chỉ là tiền tố cho hàm Tích lũy. – highBandWidth