一、使用GDI+获取两个多边形区域相交、非相交区域
在 C# 中使用 GDI+(Graphics Device Interface Plus)处理图形时,你可以使用 System.Drawing
和 System.Drawing.Drawing2D
命名空间中的类来操作区域(Region)。下面是一个示例,说明如何创建两个多边形区域,计算它们的相交和非相交部分,并对这些部分进行填充。
首先,确保你有以下引用:
using System.Drawing;
using System.Drawing.Drawing2D;
接下来,可以编写如下代码:
public void DrawPolygonIntersections(Graphics g)
{
// 创建两个多边形
Point[] polygon1 = new Point[]
{
new Point(50, 50),
new Point(100, 50),
new Point(100, 100),
new Point(50, 100)
};
Point[] polygon2 = new Point[]
{
new Point(75, 75),
new Point(125, 75),
new Point(125, 125),
new Point(75, 125)
};
// 创建 Region 对象
Region region1 = new Region(polygon1);
Region region2 = new Region(polygon2);
// 计算相交区域
Region intersectRegion = new Region();
intersectRegion.Intersect(region1, region2);
// 计算非相交区域(差集)
Region nonIntersectRegion1 = new Region();
nonIntersectRegion1.Exclude(intersectRegion);
nonIntersectRegion1.Union(region1);
Region nonIntersectRegion2 = new Region();
nonIntersectRegion2.Exclude(intersectRegion);
nonIntersectRegion2.Union(region2);
// 创建画刷
SolidBrush brush1 = new SolidBrush(Color.Red);
SolidBrush brush2 = new SolidBrush(Color.Blue);
SolidBrush brush3 = new SolidBrush(Color.Green);
// 填充相交区域
g.FillRegion(brush3, intersectRegion);
// 填充非相交区域
g.FillRegion(brush1, nonIntersectRegion1);
g.FillRegion(brush2, nonIntersectRegion2);
// 清理
region1.Dispose();
region2.Dispose();
intersectRegion.Dispose();
nonIntersectRegion1.Dispose();
nonIntersectRegion2.Dispose();
brush1.Dispose();
brush2.Dispose();
brush3.Dispose();
}
这个函数首先定义了两个多边形并创建了对应的 Region
对象。然后,它创建了一个新的 Region
来存储相交部分,通过调用 Intersect
方法。接着,它计算了非相交区域,即两个原始区域减去相交区域。最后,使用不同颜色的画刷填充这些区域。
注意,不要忘记在函数结束时释放所有创建的资源。这包括 Region
和 SolidBrush
对象,因为它们实现了 IDisposable
接口,需要显式调用 Dispose
方法来释放与之关联的非托管资源。
二、使用GDI+获取两个多边形区域相交、非相交区域的所有坐标集合
2.1使用GDI+获取两个多边形区域相交区域的所有坐标集合
属于是多边形可能存在交叉及互相重叠部分,参考如下链接:
【C#】在一个给定的宽、高范围内,获取到该多边形内部的所有坐标集合?-CSDN博客文章浏览阅读304次,点赞2次,收藏3次。【C#】在一个给定的宽、高范围内,获取到该多边形内部的所有坐标集合?https://blog.csdn.net/wangnaisheng/article/details/140513467
2.2使用GDI+获取两个多边形区域非相交区域的所有坐标集合
根据2.1修改即可。