Trò chơi giải đố: cắt các đa giác không lồi trên các hình


7

Tôi có một con số ban đầu trong tập tin SVG. Tôi cần phải chia nó ngẫu nhiên trên các phần, một ví dụ được chỉ định bên dưới:
hình ảnh mẫu
Tôi có một ý tưởng, để sử dụng để phân vùng sơ đồ Voronoi (thuật toán của Fortune). Sau đó tôi có thể thay đổi đường giao nhau của các hình để cho chúng độ cong không? Có thể thu được để xác định mỗi hình dạng là một con đường? Để tạo trò chơi, tôi sẽ sử dụng cocos2d-x.

Câu trả lời:


2

Tôi nghĩ rằng bạn đã có ý tưởng đúng, nhưng việc thực hiện sẽ vô cùng khó khăn. Tôi đoán rằng khi bạn nói 'trong tệp SVG', bạn có nghĩa là hình dạng được xác định bởi một (hoặc nhiều hơn - hình mẫu của bạn có một đường dẫn bên trong!). Thật không may, các đường dẫn SVG có thể phức tạp đáng kể, với cả hai đường cong Bezier bậc hai và khối và các đoạn cung tròn elip. Giao điểm của một đường thẳng với bất kỳ trong số này là một vấn đề đã được giải quyết, nhưng là một vấn đề không tầm thường và thậm chí cả vấn đề tái cấu trúc đường cong Bezier để chia chúng thành hai điểm tại điểm giao nhau là một mẹo nhỏ - về cơ bản, những gì bạn đang tìm kiếm đủ phức tạp để lấy một cuốn sách nhỏ để trả lời, không phải là một bài đăng trên diễn đàn! Điều đó nói rằng, có một số tài liệu tham khảo tuyệt vời ra khỏi đó; ngắn ngắnphiên bản của câu trả lời là bạn muốn sử dụng phân chia đệ quy cùng với thuộc tính được gọi là 'biến đổi giảm dần' của đường cong Bezier (về cơ bản, thuộc tính mà đường cong Bezier được chứa trong thân lồi của các điểm kiểm soát của nó) để thu hẹp các vị trí có thể có của giao lộ (và lưu ý rằng một đường có thể có nhiều điểm giao nhau và đó là trường hợp đặc biệt khác mà bạn có thể phải tính đến). Và một khi bạn giải quyết vấn đề giao lộ, bạn vẫn còn một con đường dài phía trước - bạn sẽ có rất nhiều công việc kế toán để theo dõi các đoạn đường cong và đường thẳng và phân chia chúng thành từng mảnh một cách chính xác. Điều này không làm bạn nản lòng chút nào; chỉ cần nhận thức được tầm quan trọng của những gì bạn đang cố gắng làm!

May mắn thay, câu hỏi khác của bạn - 'tôi có thể thay đổi đường giao nhau của các hình để cho chúng độ cong không?' - có một câu trả lời dễ dàng hơn: hoàn toàn. Vì bạn đã ở trong vùng đất SVG, nên tôi cũng sử dụng các đường cong Bezier ở đây: đầu tiên, chọn năm điểm p1..p5 dọc theo đoạn đường bạn muốn 'cong ra', có thể ngẫu nhiên trong các khoảng cách đều nhau ; sau đó thay thế chúng một khoảng cách ngẫu nhiên nhỏ khỏi đường và sử dụng chúng làm điểm kiểm soát của hai đường cong Bezier riêng biệt, một điểm sử dụng các điểm p0, p1, p2, p3 và điểm còn lại sử dụng các điểm p3, p4, p5 và p6 (trong đó p0 và p6 ở đây là hai điểm cuối của đoạn đường gốc). Bạn cũng có thể tận dụng thuộc tính lồi của đường cong Bezier ở đây, đảm bảo rằng các điểm bị dịch chuyển của bạn không ' T dịch chuyển quá xa để hai vùng ở hai bên của đường cong vẫn là các vùng đơn giản. Điều này sẽ cung cấp cho bạn loại ranh giới cong mà bạn đang theo đuổi.


Cảm ơn bạn đã trả lời. Tôi quyết định sử dụng tệp SVG vì hình ảnh SVG và hành vi của chúng được xác định trong tệp văn bản XML và có thể tôi có thể phá vỡ hình bằng cách sử dụng thông tin nội bộ của hình. Tôi nghi ngờ rằng đây không phải là giải pháp tốt nhất, nhưng lĩnh vực kiến ​​thức này là mới đối với tôi. Bạn nghĩ thế nào nếu tôi thay thế tệp SVG sang một thứ khác, nó sẽ đơn giản hóa giải pháp? Có thể bạn biết những cách khác để phân vùng hình dạng không lồi với các đường cong ở bên cạnh?
Crazy D0G

Tôi nghĩ rằng SVG là một định dạng tốt - như bạn lưu ý, đó là một định dạng văn bản được xác định rõ có thể được phân tích cú pháp đơn giản. SVG không phải là điều gây ra vấn đề khó khăn - đó là vấn đề cốt lõi khi làm việc với spline và như vậy. Nhưng tôi không nghĩ rằng bất kỳ định dạng nào khác có thể diễn tả các số liệu giống như trong ví dụ của bạn đủ chính xác. Đó chỉ là một vấn đề thách thức vốn có.
Steven Stadnicki

... mà nói, nó không thể vượt qua; nó thậm chí còn tương đối đơn giản (mặc dù có rất nhiều chi tiết nhỏ phải lo lắng). Bạn chỉ cần xây dựng (hoặc tìm) một thư viện Bezier tốt. Vấn đề duy nhất không được nêu ra, có thể hơi khó, là làm thế nào để chọn các điểm trong hình của bạn để xây dựng sơ đồ Vornoi từ đó.
Steven Stadnicki

Vị trí của các điểm có thể được thực hiện ngẫu nhiên, sao cho chúng rơi vào khu vực của hình hoặc chỉ định nhiều dòng và tiếp tục lấy một điểm ngẫu nhiên trên chúng.
Crazy D0G
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.