在区域计算中,有时候需要区域的合并,相交,差值等需求。
这里推荐一个 Clipper2 库, 可以快速高效实现
AngusJohnson/Clipper2: Polygon Clipping and Offsetting - C++, C# and Delphi (github.com)
此库有 C++, C#, Delphi 版本,都比较好用。
//C++ Paths64 subject, clip, solution; subject.push_back(MakePath("100, 50, 10, 79, 65, 2, 65, 98, 10, 21")); clip.push_back(MakePath("98, 63, 4, 68, 77, 8, 52, 100, 19, 12")); solution = Intersect(subject, clip, FillRule::NonZero);
//Delphi var subject, clip, solution: TPaths64; begin SetLength(subject, 1); subject[0] := MakePath([100, 50, 10, 79, 65, 2, 65, 98, 10, 21]); SetLength(clip, 1); clip[0] := MakePath([98, 63, 4, 68, 77, 8, 52, 100, 19, 12]); solution := Intersect( subject, clip, frNonZero);