2012-01-16 23 views
7

Như tiêu đề đã nói tôi cần mã nguồn C/C++ hoặc thư viện mà tôi có thể sử dụng để giải quyết vấn đề Đóng gói Bin với hình chữ nhật 2D nơi thùng cũng là hình chữ nhật và hình chữ nhật cũng được xoay góc 90 ° để vừa khít hơn . Tôi đã có tất cả các giá trị cần thiết, vì vậy tôi không cần thuật toán đóng gói trực tuyến.Có nguồn c +/lib để giải quyết Đóng gói Thùng 2D với thùng hình chữ nhật (không vuông) và xoay không?

Tôi chỉ tìm thấy một thư viện liên quan đến một thùng vuông và không xoay mà không đủ hiệu quả cho nhu cầu của tôi.

Tôi thực sự đánh giá cao mọi thứ C/C++ xử lý thùng hình chữ nhật và xoay vòng.

Cảm ơn.

PS: Thời gian cần thiết để tính toán không quan trọng, chỉ có kết quả là.

PPS: Nó phải là C hoặc C++, và tôi đã không tìm thấy bất cứ điều gì hữu ích tìm kiếm stackoverflow ...

+0

Câu hỏi lặp lại gần như: http://stackoverflow.com/questions/8637785/difficult-2d-bin-packing-algorithm-to-place-a-rectangle-in-xy-location/8638099#8638099 – Lalaland

Trả lời

11

http://clb.demon.fi/files/RectangleBinPack.pdf là then chốt. Đó là tham chiếu trên bao bì thùng 2ngày.

Bạn có thể sửa đổi một trong các thuật toán để đáp ứng nhu cầu của mình. Tôi nghi ngờ việc xoay vòng là cần thiết, các thuật toán khá tiên tiến như chúng.

Điều này (https://github.com/Lalaland/PixelPacker/blob/master/src/algoMaxRects.cpp) là ví dụ về cách triển khai thuật toán MaxRects.

Sửa đổi bạn có thể phải thực hiện ở trên cùng của thuật toán, khi chọn hình chữ nhật tiếp theo để sử dụng. Đơn giản chỉ cần có nó cũng nhìn vào định hướng khác nhau của các hình chữ nhật cùng với đi xe đạp thông qua toàn bộ danh sách.

+0

Xin chào, cảm ơn trả lời của bạn. bạn có thể vui lòng giải thích thêm một chút về vị trí và những thay đổi nào cần thiết để thực hiện kiểm tra luân phiên không? – HardCoder

+1

Bạn cũng có thể tìm thấy mã của tác giả tại đây: https://github.com/juj/RectangleBinPack – Brian

4

tôi thấy chủ đề này một vài tuần trước, sau khi lướt qua đọc PDF trong câu trả lời, và toying xung quanh với mã tác giả, tôi đã làm một viết lại mà hơn phù hợp với nhu cầu của tôi (texture atlas đóng gói)

Nếu bất cứ ai khác quan tâm ... https://github.com/chris-stones/BinPack2D

  • cho phép người dùng bó một cấu trúc dữ liệu với hình chữ nhật trình (tên file orig, vv)
  • Gói nhiều thùng (đối với 2ngày mảng bản đồ kết cấu - GL_EXT_texture_array)

Ngoài ra, thay vì theo dõi chia tách và tham gia hình chữ nhật miễn phí, tôi theo dõi và sắp xếp các góc trên cùng bên trái miễn phí. Tôi thấy nó đơn giản hơn nhiều để thực hiện, với kết quả tốt như nhau.

Không có tài liệu, Xem ExampleProgram() ở đầu tệp tiêu đề.

+0

Thực hiện tốt, Chris. Mã là khá sạch sẽ và đóng gói có chất lượng cao. Tuy nhiên, thử nghiệm giao cắt lực ngang là một con lợn có hiệu suất đáng kể. Có thể có một số loại cây Kd để giảm số lượng thử nghiệm.Một cách khác để cải thiện hiệu suất sẽ đơn giản là sử dụng kích thước canvas nhỏ hơn để giảm số lượng hình chữ nhật trên mỗi canvas. –

Các vấn đề liên quan