Trong ví dụ này: http://bl.ocks.org/mbostock/1747543:Tránh va chạm giữa các nút và các cạnh trong D3 bố trí lực lượng
... Mike cho chúng ta thấy làm thế nào để tránh va chạm giữa các nút để không có hai nút chồng lên nhau.
Tôi tự hỏi liệu có thể tránh va chạm giữa các nút và các cạnh sao cho không có nút 'clip' hoặc chồng chéo một cạnh trừ khi nó được kết nối bởi cạnh đó.
Ví dụ sau sử dụng chương trình D3 lực trực tiếp mà nút L
trùng lặp với các cạnh nối I
và A
, và tương tự, nút M
trùng lặp với các cạnh nối L
và D
. Làm thế nào để chúng tôi ngăn chặn các trường hợp như vậy?
Điều này là không thể thực hiện bố cục lực trong D3. Bạn sẽ cần phải thực hiện điều này cho mình. Lưu ý rằng đây thực sự là một vấn đề rất khó (tính toán), vì vậy ngay cả khi bạn đã thực hiện nó có thể sẽ không muốn chạy nó trong trình duyệt. –
@LarsKotthoff, bạn đang nói, nói chung, không có thuật toán bố cục đồ thị đã biết (bao gồm cả thuật toán được triển khai cho D3) có thể giải quyết vấn đề này hiệu quả? – skyork
Điều đó tùy thuộc vào định nghĩa của bạn về hiệu quả. Để tìm một giải pháp (tĩnh) cho âm thanh này ít nhất là NP-cứng với tôi. Điều này không có nghĩa là nó có thể được giải quyết nhanh chóng trong tất cả các trường hợp cụ thể, nhưng đó là khó khăn nói chung (và đối với các đồ thị lớn, bạn có thể không thể làm điều đó một cách nhanh chóng). Để sau đó thay đổi giải pháp ban đầu như vậy mà các nút sẽ di chuyển nhẹ (như mô phỏng sẽ làm) sẽ rất dễ dàng vì bạn chỉ cần thực hiện sửa chữa cục bộ. –