Tôi đang cố gắng viết một đoạn mã có danh sách các đa giác (được định nghĩa là danh sách các danh sách IntPoints) kiểm tra xem có bất kỳ liên lạc nào không và nếu hợp nhất chúng thành một đa giác . Để làm được điều này, tôi đã cố gắng trong hai phương pháp sau đây:Hợp nhất các đa giác cảm ứng cho kết quả sai
List<List<IntPoint>> output=new List<List<IntPoint>>();
output = Clipper.SimplifyPolygons(input,PolyFillType.pftPositive);
và
Clipper c = new Clipper();
c.AddPaths(input, PolyType.ptClip, true);
c.Execute(ClipType.ctUnion, output);
Bây giờ cả hai kết hợp các đa giác cùng nhau khá dễ dàng tuy nhiên họ là một chút overzelous như bất kỳ không gian mở đa giác được bỏ qua và các khu vực mở được kết hợp đơn giản thành một đa giác duy nhất, có nghĩa là một cái gì đó như thế này:
xảy ra. Bây giờ điều này rõ ràng là sai vì hai đa giác này không chạm vào nhau. Kết quả tương tự cũng xảy ra với cả hai phương pháp. Kết quả sẽ giống như đầu vào. Bất kỳ ý tưởng làm thế nào để sửa lỗi này? Các sollution không phải sử dụng thư viện clipper (tôi không kết hôn với nó) nhưng tôi cần một cái gì đó sử dụng đa giác được xác định bởi một danh sách các điểm đầu vào là một List> nơi một Intpoint chỉ là một struct có chứa một x và một y.
Sửa Tôi nhận thấy rằng vấn đề này cũng xảy ra khi không có đa giác bên trong của đa giác khác, vì vậy giải pháp luôn luôn là "đầy" chỉnh sửa chỉnh sửa: đây cũng là một ví dụ về những gì đầu vào có thể là như
input[0][0]
{ClipperLib.IntPoint}
X: -724
Y: -472
input[0][1]
{ClipperLib.IntPoint}
X: 428
Y: -472
input[0][2]
{ClipperLib.IntPoint}
X: 428
Y: -472
input[0][3]
{ClipperLib.IntPoint}
X: 428
Y: 632
input[0][4]
{ClipperLib.IntPoint}
X: 428
Y: 632
input[0][5]
{ClipperLib.IntPoint}
X: -724
Y: 632
input[0][6]
{ClipperLib.IntPoint}
X: -724
Y: 632
input[0][7]
{ClipperLib.IntPoint}
X: -724
Y: -472
input[0][8]
{ClipperLib.IntPoint}
X: -88
Y: -218
input[0][9]
{ClipperLib.IntPoint}
X: -107
Y: -218
input[0][10]
{ClipperLib.IntPoint}
X: -107
Y: -218
input[0][11]
{ClipperLib.IntPoint}
X: -107
Y: -209
input[0][12]
{ClipperLib.IntPoint}
X: -107
Y: -209
input[0][13]
{ClipperLib.IntPoint}
X: -320
Y: -172
input[0][14]
{ClipperLib.IntPoint}
X: -320
Y: -172
input[0][15]
{ClipperLib.IntPoint}
X: -320
Y: 132
input[0][16]
{ClipperLib.IntPoint}
X: -320
Y: 132
input[0][17]
{ClipperLib.IntPoint}
X: -88
Y: 173
input[0][18]
{ClipperLib.IntPoint}
X: -88
Y: 173
input[0][19]
{ClipperLib.IntPoint}
X: -88
Y: -201
input[0][20]
{ClipperLib.IntPoint}
X: -88
Y: -201
input[0][21]
{ClipperLib.IntPoint}
X: -88
Y: -218
Dữ liệu đầu vào này là một hình vuông có lỗ cắt vào đó.
Bất kỳ ai cũng biết cách mô tả vấn đề này tốt nhất? Đa giác trong đa giác được hợp nhất? Không cho phép các vùng lân cận? – Thijser
Tôi nghĩ rằng tôi có thể đã tìm thấy sollution nhưng điều đó sẽ phụ thuộc vào câu trả lời của https://stackoverflow.com/questions/34263601/algoritm-for-translating-list-of-wallsections-into-coherent-polygon – Thijser