Tôi đang cố gắng viết một plugin cho Blender tự động sắp xếp một nút cây gọn gàng, không có chồng chéo hoặc các kết nối chảy sang trái. Tôi có quyền truy cập vào danh sách các nút, vị trí của chúng, kích thước của chúng và danh sách các kết nối/liên kết. Biểu đồ chạy từ trái sang phải và có thể có nhiều nút bắt đầu và kết thúc. Sản lượng của một node không thể kết nối với đầu vào của một nút trước đó, hoặc đó là đầu vào của riêngLàm cách nào để sắp xếp biểu đồ tuyến tính mà không chồng chéo?
Có ai biết của một bài báo hoặc bài viết tập trung vào mã hóa một cái gì đó mà có thể tắt chức năng này (không phụ thuộc cyclic.):
?
Phương pháp tôi đã tạo ban đầu là: Đối với tất cả các nút không có kết nối đầu vào, hãy xếp hàng chúng ở bên trái. Đối với tất cả các nút được kết nối với các nút bắt đầu này, đặt chúng ở bên phải của nút bắt đầu kết nối. Lặp lại điều này cho mỗi nút cho đến khi kết thúc. Nếu một nút chồng lên nhau, di chuyển nó và chuỗi các nút sang phải, xuống.
này làm việc tuyệt vời cho mỗi chuỗi bị cô lập, nhưng khi một nút của một chuỗi kết nối với một nút của người khác (một chi nhánh kết nối trở lại thân cây chẳng hạn), nó sẽ thường có một kết nối ngược:
Phương pháp này tôi đã đưa ra có vẻ khá ... thô. Tôi đã đọc một chút về bố cục Spring Force-Directed, nhưng chúng dường như nhiều hơn cho các đồ thị chảy theo bất kỳ/tất cả các hướng nào và tôi không hoàn toàn chắc chắn cách tôi thực hiện thủ công ở đây dù sao, vì tôi ' m hạn chế sử dụng toán học lõi một mình mà không có thư viện bên ngoài khác.
Nó không chính xác là một vấn đề phổ biến, nhưng tôi là người đầu tiên cố gắng tìm ra nó. Tôi không yêu cầu mã ví dụ chính xác, chỉ cần một cái gì đó để xem xét để giúp tôi làm việc ra một thuật toán phong nha.
Vì nó sẽ được sử dụng bởi những người khác, tôi không thể dựa vào bất kỳ phần mềm hoặc thư viện bên ngoài nào. Tôi đã nhìn vào các công cụ lý thuyết GraphViz, mà đã truyền cảm hứng cho tôi một chút, mặc dù tôi không bao giờ thực sự sử dụng bất kỳ của nó. –