一、使用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修改即可。